J'ai utilisé la même fonction (OneWayEncrypt (edit1.Text)) dans Delphi 5 et 2010.
Pourquoi les résultats sont-ils différents? (Ou comment puis-je donner les mêmes résultats de Delphi 2010?)Delphi 5 à 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;
Comment est-ce une fonction de cryptage? C'est une fonction de hachage avec perte utilisant CRC32 pour calculer des hachages très faibles. –
Points intéressants: Lorsque vous exécutez ce code, le résultat de OneWayEncrypt est-il une valeur à huit chiffres dont les quatre chiffres les plus significatifs sont tous à zéro? Parce que quand j'exécute ce code ici, en utilisant une table que j'ai faite moi-même pour vos constantes ci-dessus, qui sont de taille DWORD, pour une raison quelconque, j'obtiens ce résultat. –