![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Итак,вопрос такой.Есть контрольная сумма Crc32(1163338237 - в десятичном виде).
Зашифрованная данным алгоритмом : Код:
var CRCtable: array[0..255] of cardinal;
procedure CRCInit;
var c: cardinal;
k, j: integer;
begin
for k := 0 to 255 do
begin
c := k;
for j := 1 to 8 do
if odd( c ) then
c := (c shr 1) xor $E6B8B860
else
c := (c shr 1);
CRCtable [ k ] := c;
end;
end;
function calcCRC(str:string):integer;
var crc,k:integer;
begin
crc:=$FFFFFFFF;
for k:=1 to length(str) do
crc := (crc shr 8) xor CRCtable[ord(str [ k ]) xor (crc and $000000FF)];
result := crc;
end;Возможно ли перевести ее обратно в обычный текст? Последний раз редактировалось kreuzzz, 15.01.2015 в 21:55. |
|
#2
|
||||
|
||||
|
Хеширование - это не шифрование. Это генерация числа фиксированной длины из набора данных произвольной длины, причем так, чтобы небольшое изменение входных данных приводило к резкому изменению числа. CRC32 преобразует данные любой длины в 4 байта. А раз возможных входных данных - бесконечное множество, а длина результата фиксирована, значит по определению множество (тоже бесконечное) входных текстов получат один и тот же CRC32. А это в свою очередь значит, что CRC32 обратно в конкретный текст преобразовать невозможно. Можно только получить множество подходящих текстов, но при большом количестве симовлов ( где-то >6 ) это уже затянется на часы, а если
символов еще больше - на тысячелетия. Последний раз редактировалось Bargest, 15.01.2015 в 22:42. |