Вверх ↑
Пакеты 
HiAsm4
Windows 
Компоненты 
Инcтpумeнты 
Криптография - Hashsum

Hashsum
Краткое описание
  Компонент Hashsum - предназначен для получения ХЕШ суммы входных данных по одному из доступных алгоритмов
Параметры
  • HashType - Тип используемого алгоритма
  • Методы
  • doHashsum - Получает хэш сумму из данных
  • doFileHashsum - Получает хэш сумму по содержимому файла
  • События
  • onResult - Событие происходит всякий раз после получения хэш суммы и выдаёт её в поток
  • Данные
  • Data - Данные для получения хэш суммы
  • Пример
      Пример использования компонента Hashsum

    
    Add(MainForm,1885163,126,98)
    {
    Visible=1
    Caption="Пример использования Hashsum"
    Point(doVisible)
    link(onActivate,3262116:doWork1,[])
    }
    Add(ChildForm,3262116,175,98)
    {
    link(onEvent1,1885163:doVisible,[(228,104)(228,157)(105,157)(105,132)])
    link(onEvent2,1885163:doClose,[(219,111)(219,146)(114,146)(114,125)])
    }
    BEGIN_SDK
    Add(EditMulti,1046684,21,21)
    {
    EventCount=2
    WorkCount=1
    Width=321
    Height=221
    link(doWork1,14188682:doClose,[(32,27)(32,146)])
    }
    Add(MainForm,14188682,49,119)
    {
    Left=35
    Top=105
    Width=253
    Height=158
    BorderStyle=7
    TaskBar=1
    DragForm=0
    Point(onClose)
    Point(doShowModal)
    Point(doPlaceInTaskBar)
    link(onCreate,14188682:doPlaceInTaskBar,[(91,139)(91,177)(37,177)(37,160)])
    }
    Add(Edit,12980779,154,63)
    {
    Left=55
    Top=50
    Width=130
    Text="password"
    }
    Add(Button,517459,105,119)
    {
    Left=95
    Top=90
    link(onClick,9663469:doHashsum,[])
    }
    Add(Hashsum,9663469,154,119)
    {
    link(onResult,5034941:doCompare,[])
    link(Data,12980779:Text,[])
    }
    Add(StrMask,5034941,210,119)
    {
    Mask="5F4DCC3B5AA765D61D8327DEB882CF99"
    link(onFalse,15272090:doMessage,[(258,125)(258,69)])
    link(onTrue,1997586:doData,[])
    }
    Add(Message,15272090,266,63)
    {
    Message="NO!!!! PASS!! \r\nNO!!!! PASS!!"
    }
    Add(Button,10185046,266,182)
    {
    Left=215
    Top=10
    Width=25
    Caption="X"
    link(onClick,1046684:onEvent2,[(327,188)(327,34)])
    }
    Add(DoData,1997586,266,126)
    {
    Data=Integer(1)
    link(onEventData,1046684:onEvent1,[(318,132)(318,27)])
    }
    END_SDK
    Замечания
       Если на вход элемента поданы данные в формате Stream, то ХЕШ сумма будет вычеслена от всего бинарного потока. Все остальные форматы данных предварительно конвертируются в строку.
       Основное применение компонента заключается в идентификации паролей по следущему принципу:
    • Пользователь вводит пароль, после чего программа вычисляет его ХЕШ сумму и запоминает
    • При повторном вводе пароля программа опять вычисляет ХЕШ сумму и сравнивает её с запомненной ранее
    • Если обе ХЕШ суммы совпали, то пароль был введен верно
      Так же часто ХЕШ сумма используется для проверки целостности данных при передачи больших объемов информации, например, через сеть Internet. Только в этом случае она вычисляется до отправки данных и передается вместе с ними. Затем при принятие данных производится повторное вычисление хеша и сравнения с тем, что пришел вместе с данными. Очевидно, что если хеши одинаковые, то данные получены в полной сохранности.

      В тоже время, зная ХЕШ сумму, мы не можем восстановить по ней пароль или сами данные. Причина тут в алгоритме получения такой суммы, который для наглядности можно представить следующим образом:
    например, есть пароль Hello, с которого мы вычисляем некоторую ХЕШ сумму:
    
    ХЕШ = H + e + l + l + o
    где знак + означает суммирование кодов символов слова. Очевидно, что наш ХЕШ будет равен некоторому числу. А сможем ли мы проделать туже операцию в обратную сторону? Конечно нет, потому что получим одно уравнение с пятью неизвестными.

      Именно так, только с гораздо большим числом преобразований, получается и ХЕШ сумма в компоненте.

    Обновление элемента: [svn]Hashsum.pas[/svn]
    BB-code статьи для вставки
    Всего комментариев: 0
    (комментарии к статье еще не добавлены)
    Комментарий
    ...