对称加解密函数

来源:互联网 发布:淘宝买宠物狗可靠吗 编辑:程序博客网 时间:2024/04/28 17:55

--delphi

procedure Encrypt(Value: PAnsiChar; Size: Integer; const PSW: AnsiString); overload;
var
  i,l: Integer; w: PAnsiChar;
  procedure E(ic: PAnsiChar; pc: AnsiChar); begin ic^ := AnsiChar(Byte((ic^)) xor Byte(pc)); end;
begin
  w := PAnsiChar(PSW); l := Length(PSW);
  for i := 0 to Size - 1 do E((Value + i),(w + (i mod l))^);
end;

function Encrypt(Value: AnsiString; const PSW: AnsiString; Flag: Boolean): AnsiString; overload
var
  Data,Tmp: AnsiString;
  i: Integer;
  p: PAnsiChar;
begin
  Result := '';
  if Flag then begin // 加密后编码
    if Length(Value) = 0 then Exit;
    SetLength(Data,Length(Value)); StrCopy(PAnsiChar(Data),PAnsiChar(Value));
    Encrypt(PAnsiChar(Data),Length(Data),PSW); p := PAnsiChar(Data);
    for i := 0 to Length(Data) - 1 do
      Result := Result + IntToHex(Byte(AnsiChar((p+i)^)),2);
  end else begin     // 编码后解密
    p := PAnsiChar(Value);
    for i := 0 to Length(Value) - 1 do
      if not ((p + i)^ in ['0'..'9','A'..'F']) then Exit;
    for i := 1 to Length(Value) div 2 do
    begin
      Tmp := '0x' + Copy(Value,i*2-1,2);
      StrToInt(Tmp);
      Result := Result + AnsiChar(StrToInt(Tmp));
    end;
    Encrypt(PAnsiChar(Result),Length(Result),PSW);
  end;
end;

 

 

 

--c#

        public string Encrypt(string user, string pwd, bool flag)
            char[] uData, pData;
            string resultstr = "";
            if (flag)
            {
                uData = user.ToCharArray();
                pData = pwd.ToCharArray();
                for (int i = 0; i < pwd.Length; i++)
                {
                    string kk = (Convert.ToInt16(uData[i % user.Length] ^ pData[i])).ToString("X");
                    resultstr += (kk.Length % 2 == 0) ? kk : "0" + kk;
                }
            }
            else
            {
                uData = user.ToCharArray();
                for (int i = 0; i < pwd.Length / 2; i++)
                    resultstr += (char)(int.Parse(pwd.Substring(i * 2, 2), System.Globalization.NumberStyles.AllowHexSpecifier) ^ uData[i % user.Length]);
            }
            return resultstr;
        }