Я использовал ту же функцию (OneWayEncrypt (Edit1.Text)) в Delphi 5 и 2010
Почему результаты отличаются? (Или как я могу дать те же результаты 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;
Как это функция шифрования? Это функция хэширования с потерями, использующая CRC32 для вычисления очень слабых хэшей. –
Интересные моменты: когда вы запускаете этот код, является ли результат OneWayEncrypt восьмизначным значением, причем самые значащие четыре цифры равны нулю? Потому что, когда я запускаю этот код здесь, используя некоторую таблицу, которую я составил для себя для ваших констант выше, размер DWORD по какой-то причине, я получаю этот результат. –