Что нового

Хеширование данных: алгоритмы.

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Предлогаю в этой теме обсудить способы хеширования данных. Я в этом деле опыта (опять и снова :laugh:smile: не имею. Вот набил что-то "с лету" специально для этой темы. Но насколько алгоритм адекватен не знаю - писал интуитивно. Подарите на Старый Новы Год коробку знаний! :beer: Или поделитесь Опытными Подарками. ;) Кстати, со Старым Новым годом всех! :smile:

Код:
Dim $Hesh

$q = String("dedushka moroz")
$s = StringLen($q)
For $i = 1 To $s
	$a = StringMid($q, $i, 1)
	$Hesh &= Asc($a)
	$Hesh /= 2
Next
For $i = 1 To $s
	$Hesh = Mod($Hesh, 3.14159) ;Это для мистики ))
Next
$Hesh = StringTrimLeft(String($Hesh), 2)

ConsoleWrite($Hesh & @CRLF) ;Хеш регистрозависим.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
_Crypt_HashData() в справке.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Код:
#include  <Crypt.au3>

; Example of hashing data and using it to authenticate password

; This is the MD5-hash of the correct password
$bPasswordHash="0xCE950A8D7D367B5CE038E636893B49DC"

$sPassword=InputBox("Login","Please type the correct password.","Yellow fruit that is popular among monkeys")

If _Crypt_HashData($sPassword,$CALG_MD5)=$bPasswordHash Then
	MsgBox(64,"Access Granted","Password correct!")
Else
	MsgBox(16,"Access Denied","You entered the wrong password!")
EndIf


с Новым годом :smile:
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Старая русская справка... там такого не было.

Спасибо :smile:
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Как-то я писал функцию, использующую Crypt.au3 и аметил одну важную особенность.

Библиотека содержит несколько алгоритмов криптования:

$CALG_3DES
$CALG_DES
$CALG_RC2
$CALG_RC4

Я перепробовал все алгоритмы, но только последний работал нормально. В остальных случаях исходный и результирующий файлы отличались на несколько байт. Сравнение показало, что другие алгоритмы кое-где склеивали две строки вместе. На файле 10 Мб было 4 таких места. В общем, советую использовать $CALG_RC4 - при криптовании туда и обратно он выдал аналогичный файл.

Yashied обнаружил, что дело не в самом алгоритме, а в реализации функций _Crypt_EncryptFile() и _Crypt_DecryptFile()
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Suppir

Очень полезная информация. Спасибо!
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Можно ещё так поизвращатся:

Код:
#include <String.au3>

MsgBox(0,'',HashData("AutoIt после запуска запрашивает файл сценария"))

Func HashData($String)
	
	Global $CryptHash
	Global $Hash
	
	$Binary = StringToBinary($String)
	$Format = StringTrimLeft($Binary,2)
	$Strlen = StringLen($Format)
	
	$Revers = _StringReverse($Format)
	For $i = $Strlen To 1 Step -2
		$StrMid = StringMid($Revers, $i, 2)
		$Hash &= $StrMid
	Next	

    $HashCode = StringLower($Hash)
	$LenHash = StringLen($HashCode)
	$StartLen = $LenHash/6
	$StartMid = $LenHash/4
	$EndMid = $LenHash/2

	$Start = StringLeft($HashCode,$StartLen)
	$Midlle = StringLeft(StringTrimLeft($HashCode,$StartLen),$StartMid)
	$MidEnd = StringLeft(StringTrimLeft($HashCode,$StartLen+$StartMid),$EndMid)
	$EndCode = StringTrimLeft($HashCode,$StartLen+$StartMid+$EndMid)
	$FormatHash = "{" & $Start & "-" & $Midlle & "-" & $MidEnd & "-" & $EndCode & "}"

    $CryptHash = $FormatHash
	
	Return $CryptHash
	
EndFunc
 
Верх