![]() |
|
|
Регистрация | << Правила форума >> | 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 ) это уже затянется на часы, а если
символов еще больше - на тысячелетия. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 15.01.2015 в 22:42. |