timsky
Осваивающий
- Сообщения
- 93
- Репутация
- 28
Для справки: HMAC
Нашел на оф. форуме вот такую функцию.
Чуток подправил ее, вот пример:
Это должно выдавать 58585ACD673067F96BEA32A1C57BF3FC3FD5A42678567E72D5CB0AB7F08EA41DCF3A41AF96C53948E13184AE6FE6CD0B8B4193FC593DFB2693B00C2B0EE7A316
А выдает B212278CE73603B7B0A522013FA9943B39189D29F98ECB43FE2BA0E06FB95E747CEC20CD4B719AF8E68C09C231D0C012DFA376AE12EECC80188825F40B60200C
Вот где это можно проверить: http://www.asecuritysite.com/security/Encryption/hmac
Проверял не толко в онлайн сервисах, тот же http://hcrypto.sourceforge.net/ все прекрасно HMAC-ает вот такой командной строкой:
abc.txt - файл, содержащий 3 символа: "123"
313233 - HEX байтов 1,2 и 3
Сделал свой вариант (запорол уже его, но выдавал он то же самое, неправильное...), все идет вроде нормально до этого места:
В чем затык? :stars:
Нашел на оф. форуме вот такую функцию.
Чуток подправил ее, вот пример:
Код:
#include <Crypt.au3>
$CALG_SHA_512 = 0x0000800e
$message = 'abc'
$key = '123'
$result = hmac($key, $message)
If @error Then MsgBox(16, @extended, @error)
MsgBox(0, BinaryLen($result), $result)
;ClipPut($result)
Func hmac($key, $message, $sAlg = "SHA_512")
Local $blocksize = 64
Local $a_opad[$blocksize], $a_ipad[$blocksize]
Local Const $oconst = 0x5C, $iconst = 0x36 ; 92 / 54 DEC
Local $opad = Binary(''), $ipad = Binary('')
$key = Binary($key)
If BinaryLen($key) > $blocksize Then $key = _HASH($key, $sAlg)
For $i = 1 To BinaryLen($key)
$a_ipad[$i - 1] = Number(BinaryMid($key, $i, 1))
$a_opad[$i - 1] = Number(BinaryMid($key, $i, 1))
Next
For $i = 0 To $blocksize - 1
$a_opad[$i] = BitXOR($a_opad[$i], $oconst)
$a_ipad[$i] = BitXOR($a_ipad[$i], $iconst)
Next
For $i = 0 To $blocksize - 1
$ipad &= Binary('0x' & Hex($a_ipad[$i], 2))
$opad &= Binary('0x' & Hex($a_opad[$i], 2))
Next
; $ipad = StringToBinary($ipad)
; $opad = StringToBinary($opad)
;MsgBox(0, VarGetType($ipad), $ipad)
;MsgBox(0, VarGetType($opad), $opad)
Local $ret = _HASH($ipad & Binary($message), $sAlg)
$ret = _HASH($opad & $ret, $sAlg)
Return $ret
EndFunc ;==>hmac
Func _HASH($message, $sAlg)
Return _Crypt_HashData($message, Eval('CALG_' & $sAlg))
EndFunc
Это должно выдавать 58585ACD673067F96BEA32A1C57BF3FC3FD5A42678567E72D5CB0AB7F08EA41DCF3A41AF96C53948E13184AE6FE6CD0B8B4193FC593DFB2693B00C2B0EE7A316
А выдает B212278CE73603B7B0A522013FA9943B39189D29F98ECB43FE2BA0E06FB95E747CEC20CD4B719AF8E68C09C231D0C012DFA376AE12EECC80188825F40B60200C
Вот где это можно проверить: http://www.asecuritysite.com/security/Encryption/hmac
Проверял не толко в онлайн сервисах, тот же http://hcrypto.sourceforge.net/ все прекрасно HMAC-ает вот такой командной строкой:
Код:
hmac.exe --file=abc.txt --hkey=313233 --algo=SHA-512
313233 - HEX байтов 1,2 и 3
Сделал свой вариант (запорол уже его, но выдавал он то же самое, неправильное...), все идет вроде нормально до этого места:
Код:
Local $ret = _HASH($ipad & Binary($message), $sAlg)
$ret = _HASH($opad & $ret, $sAlg)
Return $ret
В чем затык? :stars: