在 CnPack 提供的源代码包里,提供了 des 加解密单元文件,提供了以下四个功能函数: function DESEncryptStr(Str, Key: AnsiString): AnsiString; { 传入明文与加密 Key,DES 加密返回密文
你的那段加密解密函数应该是用的这个吧?
//加密函数 String:需要加密的字符串Key密钥Function EncrypKey (Src:String; Key:String):string;
var
idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
TmpSrcAsc :Integer;
Range :Integer;
begin
KeyLen:=Length(Key);
if KeyLen = 0 then key:='Think Space';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;
Randomize;
offset:=Random(Range);
dest:=format('%12x',[offset]);
for SrcPos := 1 to Length(Src) do
begin
SrcAsc:=(Ord(Src[SrcPos]) + offset) MOD 255;
if KeyPos < KeyLen then KeyPos:= KeyPos + 1 else KeyPos:=1;
SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);
dest:=dest + format('%12x',[SrcAsc]);
offset:=SrcAsc;
end;
Result:=Dest;
end;
//解密函数 String:需要解密的字符串Key密钥
Function UncrypKey (Src:String; Key:String):string;
var
idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
TmpSrcAsc :Integer;
Range :Integer;
begin
KeyLen:=Length(Key);
if KeyLen = 0 then key:='Think Space';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;
offset:=StrToInt('$'+ copy(src,1,2));
SrcPos:=3;
repeat
SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));
if KeyPos < KeyLen Then KeyPos := KeyPos + 1 else KeyPos := 1;
TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
if TmpSrcAsc <= offset then
TmpSrcAsc := 255 + TmpSrcAsc - offset
else
TmpSrcAsc := TmpSrcAsc - offset;
dest := dest + chr(TmpSrcAsc);
offset:=srcAsc;
SrcPos:=SrcPos + 2;
until SrcPos >= Length(Src);
Result:=Dest;
end;
最主要的算法就是下面这句:
sResult[i] := char(byte(sstr[i]) xor (spws shr 8));
1、将sstr[i]这个元素强制转换为byte类型,得到A;
2、将spws向右移8位,首部补8个零,相当于spws:=spws div 8得到B;
3、将A、B进行”异或“ *** 作,得到C;
4、将C赋值给sResult[i]
xor表示”异或“,shr表示”右移位“。
以上就是关于delphi实现DES字节流加密,该怎么解决全部的内容,包括:delphi实现DES字节流加密,该怎么解决、帮我分析一下这段DELPHI 就怎么算法加密的!、DELPHI的最基础的文本加密.求调教..等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)