Программа "Генератор хешей" - Pascal
Формулировка задачи:
Здравствуйте.
Хочу сделать программу-генератор хешей по алгоритму sha224. Необходимо, чтобы можно было задать диапазон значений (шифруются числовые значения с 31 символом), каждому элементу которого подбирается соответствующее значение хеша с сохранением значений в формате число:хеш. Возможно это реализовать или может есть какие-то готовые решения?
Для примера:
Задаём диапазон значений от 0.000000000000000000000000000001 до 0.60000000000000000000000000000. Для каждого значения из этого диапазона подобрать хеш по sha224.
Решение задачи: «Программа "Генератор хешей"»
textual
Листинг программы
program HashCalc; {$mode delphi} uses SysUtils, tfTypes, tfBytes, tfHashes; procedure CalcHash(const s: string); const BufSize = 32; var HashName: string='SHA224'; HashArr: THash; Buffer: array[0 .. BufSize - 1] of Byte; L: Integer; begin HashArr:= THash(HashName); for L:=1 to 32 do Buffer[L-1]:=ord(s[L]); HashArr.Update(Buffer, BufSize); Writeln(s, ': ', HashArr.Digest.ToHex); end; var s1:string; s2:string; fout:string; i:integer; begin write('Start:');readln(s1); if s1='' then s1:='0.000000000000000000000000000001'; write('Finish:');readln(s2); if s2='' then s2:='0.600000000000000000000000000000'; write('Output file name:');readln(fout); assignfile(output,fout); rewrite(output); repeat CalcHash(s1); s1[length(s1)]:=chr(ord(s1[length(s1)])+1); for i:=length(s1) downto 3 do if s1[i]>'9' then begin s1[i-1]:=chr(ord(s1[i-1])+1);s1[i]:='0';end; until s1>s2; close(output); end.
Объяснение кода листинга программы
- На строке 16 объявляется переменная
HashName
типа string и ей присваивается значениеSHA224
, которое представляет название алгоритма хеширования. - На строке 17 объявляется переменная
HashArr
типаTHash
и инициализируется значением THash(HashName), чтобы определить тип хеш-функции. - На строке 18 объявляется массив
Buffer
размером 32 байта для буфера хранения данных. - На строке 19 объявляется переменная
L
типа Integer для использования в цикле. - Начиная с 21 строки начинается процедура
CalcHash
, которая принимает на вход строкуs
для хеширования. - Внутри процедуры значение переменной
HashName
используется для инициализацииHashArr
алгоритмом хеширования. - Затем создается цикл, который перебирает первые 32 символа строки
s
и записывает их байтовые значения в массивBuffer
. - После этого вызывается метод
Update
объектаHashArr
для обновления и вычисления хеша на основе данных из буфера. - Полученное значение хеша выводится на экран с помощью процедуры
Writeln
на строке 24. - На строке 26 объявляются переменные
s1
,s2
иfout
для хранения вводимых имен файлов и значений. - На строке 29 открывается файл с именем, заданным пользователем.
- Затем начинается цикл, который вызывает процедуру
CalcHash
для каждой строки отs1
доs2
и увеличивает значениеs1
в цикле с помощью инкремента. - Цикл заканчивается, когда
s1
превышает значениеs2
. - На строке 39 закрывается файл после завершения работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д