delphi流加密算法
这种情况与语言用的汉字编码(内码)有关,看是UNICODE还是什么其他编码?windows版本不同用的编码也不同,表面显示的是“中国人”,其实内存中的二进制码不同,算出来的MD5当然不同。
Ⅱ 帮我分析一下这段DELPHI 就怎么算法加密的!
你的那段加密解密函数应该是用的这个吧?
//加密函数String:需要加密的字符串.Key密钥
FunctionEncrypKey(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);
ifKeyLen=0thenkey:='ThinkSpace';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;
Randomize;
offset:=Random(Range);
dest:=format('%1.2x',[offset]);
forSrcPos:=1toLength(Src)do
begin
SrcAsc:=(Ord(Src[SrcPos])+offset)MOD255;
ifKeyPos<KeyLenthenKeyPos:=KeyPos+1elseKeyPos:=1;
SrcAsc:=SrcAscxorOrd(Key[KeyPos]);
dest:=dest+format('%1.2x',[SrcAsc]);
offset:=SrcAsc;
end;
Result:=Dest;
end;
//解密函数String:需要解密的字符串.Key密钥
FunctionUncrypKey(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);
ifKeyLen=0thenkey:='ThinkSpace';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;
offset:=StrToInt('$'+(src,1,2));
SrcPos:=3;
repeat
SrcAsc:=StrToInt('$'+(src,SrcPos,2));
ifKeyPos<KeyLenThenKeyPos:=KeyPos+1elseKeyPos:=1;
TmpSrcAsc:=SrcAscxorOrd(Key[KeyPos]);
ifTmpSrcAsc<=offsetthen
TmpSrcAsc:=255+TmpSrcAsc-offset
else
TmpSrcAsc:=TmpSrcAsc-offset;
dest:=dest+chr(TmpSrcAsc);
offset:=srcAsc;
SrcPos:=SrcPos+2;
untilSrcPos>=Length(Src);
Result:=Dest;
end;
Ⅲ Delphi的MD5加密算法为什么加密中文有问题
md5是基于字节加密的,无论是delphi还是c#之类的,如果字符串编码不同(比如是用utf8、gbk还是unicode),那加密的结果自然都不一样。
Ⅳ DELPHI 中INI文件加密还原的问题
可以用异或加密算法。用明文的ASCII码值同密钥进行异或运算,得到密文,解密时用密文同密钥在进行异或运算即可得到明文
Ⅳ 如何用Delphi实现 淘宝接口加密解密SDK的功能
淘宝最新接口加密解密的功能,淘宝提供JAVA/PHP/.NET SDK:
自研SDK规范:
1. 加密算法要求:AES/CBC/PKCS5Padding,秘钥长度128位。
2. 获取密钥的缓存是否只应该放在内存中,在服务启动后从接口拉取。禁止存放在数据库、硬盘文件、OSS等持久化存储的地方。
3. 模糊查询部分功能,如不使用,可不实现。
4. 设置密钥的过期时间,过期重新拉取。秘钥的过期时间,在获取秘钥的接口会返回的,控制权在于top服务端。
秘钥获取接口 :taobao.top.secret.get
5. 请回传密钥的加密、解密调用次数。具体标准:加、解密调用函数每次调用,对应的计数器(各种类型计数器)会+1,5分钟左右同步一次。
异步线程会把计数器同步到top api接口: taobao.top.sdk.feedback.upload。
具体实现请参考 JAVA SDK。
最好用Delphi直接调用JAVA类实现加密解密。
Ⅵ Delphi加密算法
我用的加密解密
function EncryptString(Source, Key: string): string;
//对字符串加密(Source:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
Range: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := 'delphi';
KeyPos := 0;
Range := 256;
randomize;
Offset := random(Range);
Dest := format('%1.2x', [Offset]);
for SrcPos := 1 to Length(Source) do
begin
SrcAsc := (Ord(Source[SrcPos]) + Offset) mod 255;
if KeyPos < KeyLen then
KeyPos := KeyPos + 1
else
KeyPos := 1;
SrcAsc := SrcAsc xor Ord(Key[KeyPos]);
Dest := Dest + format('%1.2x', [SrcAsc]);
Offset := SrcAsc;
end;
result := Dest;
end;
function UnEncryptString(Source, Key: string): string;
//对字符串解密(Src:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
TmpSrcAsc: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
Key := 'delphi';
KeyPos := 0;
Offset := strtoint('$' + (Source, 1, 2));
SrcPos := 3;
repeat
SrcAsc := strtoint('$' + (Source, 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(Source);
result := Dest;
end;