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;