Программа "Генератор хешей" - 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.

Объяснение кода листинга программы

  1. На строке 16 объявляется переменная HashName типа string и ей присваивается значение SHA224, которое представляет название алгоритма хеширования.
  2. На строке 17 объявляется переменная HashArr типа THash и инициализируется значением THash(HashName), чтобы определить тип хеш-функции.
  3. На строке 18 объявляется массив Buffer размером 32 байта для буфера хранения данных.
  4. На строке 19 объявляется переменная L типа Integer для использования в цикле.
  5. Начиная с 21 строки начинается процедура CalcHash, которая принимает на вход строку s для хеширования.
  6. Внутри процедуры значение переменной HashName используется для инициализации HashArr алгоритмом хеширования.
  7. Затем создается цикл, который перебирает первые 32 символа строки s и записывает их байтовые значения в массив Buffer.
  8. После этого вызывается метод Update объекта HashArr для обновления и вычисления хеша на основе данных из буфера.
  9. Полученное значение хеша выводится на экран с помощью процедуры Writeln на строке 24.
  10. На строке 26 объявляются переменные s1, s2 и fout для хранения вводимых имен файлов и значений.
  11. На строке 29 открывается файл с именем, заданным пользователем.
  12. Затем начинается цикл, который вызывает процедуру CalcHash для каждой строки от s1 до s2 и увеличивает значение s1 в цикле с помощью инкремента.
  13. Цикл заканчивается, когда s1 превышает значение s2.
  14. На строке 39 закрывается файл после завершения работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы