我在Delphi 5和2010中使用了相同的函數(OneWayEncrypt(edit1.Text))。
爲什麼結果不同? (或者我怎麼可以給從2010年德爾福?同樣的結果)Delphi 5 to 2010
uses Sysutils, Windows, Dialogs, classes;
function OneWayEncrypt(AStr: string): string;
PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCvalue: DWORD);
implementation
const
table: ARRAY[0..255] OF DWORD =
(
//table consts are here
);
PROCEDURE CalcCRC32(p: pointer; ByteCount: DWORD; VAR CRCvalue: DWORD);
VAR
i: DWORD;
q: ^Byte;
BEGIN
q := p;
FOR i := 0 TO ByteCount - 1 DO
BEGIN
CRCvalue := (CRCvalue SHR 8) XOR table[q^ XOR (CRCvalue AND $000000FF)];
INC(q);
END
END;
function OneWayEncrypt(AStr: string): string;
var
dwCrc: DWORD;
s: string;
begin
dwCrc := $FFFFFFFF;
s := 'X' + AStr + '7F';
CalcCRC32(Addr(s[1]), Length(s), dwCrc);
result := IntToHex(dwCrc, 8);
end;
這是一個加密函數嗎?這是一個有損散列函數,使用CRC32來計算非常弱的散列。 – 2010-03-22 17:02:46
有趣的一點:當你運行這個代碼時,OneWayEncrypt的結果是一個八位數值,其中最重要的四位數字都是零?因爲當我在這裏運行這個代碼時,使用一些我自己爲上面的常量創建的表,它們是DWORD的大小,出於某種原因,我得到了這個結果。 – 2010-03-22 17:29:19