|
先加载dll获取句柄
- CALL $--ret:&&hBcrypt ,-LoadLibrary,^%^SystemROOT%\System32\Bcrypt.dll
- ENVI> &hBcrypt=*
复制代码
然后再使用dll句柄
- _SUB HMAC
- ENVI &&passphrase=%~1
- ENVI &&salt=%~2
- ENVI &&keylen=%~3
- ENVI &&iterations=%~4
- ENVI &&digest=%~5
- ENVI$# &&passphrase=%&&passphrase%
- ENVI-addr &&passphrase_p;&&passphrase_size=&&passphrase
-
- ENVI$# &&salt=%&&salt%
- ENVI-addr &&salt_p;&&salt_size=&&salt
-
- ENVI$# &&hAlg=*%&ptrlen% 0
- ENVI$# &&hHash=*%&ptrlen% 0
- ENVI &&BCRYPT_ALG_HANDLE_HMAC_FLAG=0x00000008
- CALL $--qd --16 --ret:&&ret %&hBcrypt%,BCryptOpenAlgorithmProvider,*&&hAlg,$%&&digest%,#0,#%&&BCRYPT_ALG_HANDLE_HMAC_FLAG%
- ENVI?ptr &&hAlg=&&hAlg
- CALL $--qd --16 --ret:&&ret %&hBcrypt%,BCryptCreateHash,#%&&hAlg%,*&&hHash,#0,#0,#%&&passphrase_p%,#%&&passphrase_size%,#0
- SET?ptr &hHash=&hHash
- CALL $--qd --16 --ret:&&ret %&hBcrypt%,BCryptHashData,#%&&hHash%,#%&&salt_p%,#%&&salt_size%,#0
-
- SET$# &hashSize=*4 0
- SET$# &resultSize=*4 0
-
- SET$# &hashObjectSize=*4 0
- CALL $--qd --ret:&&ret %&hBcrypt%,BCryptGetProperty,#%&hAlg%,$ObjectLength,*&hashObjectSize,#4,*&resultSize,#0
-
- CALL $--qd --ret:&&ret %&hBcrypt%,BCryptGetProperty,#%&hAlg%,$HashDigestLength,*&hashSize,#4,*&resultSize,#0
-
- ENVI?int &&hashSize=&&hashSize
- ENVI$# &&hashValue=*%&&hashSize% 0
-
- CALL $--qd --ret:&&ret %&hBcrypt%,BCryptFinishHash,#%&&hHash%,*&&hashValue,#%&&hashSize%,#0
- CALL $--qd --ret:&&ret %&hBcrypt%,BCryptDestroyHash,#%&&hHash%
- CALL $--qd --ret:&&ret %&hBcrypt%,BCryptCloseAlgorithmProvider,#%&&hAlg%,#0
-
- GETF &&hashValue,0#*,&&hashValue
- ENVI-ret %6=%&hashValue%
-
- _END
复制代码
|
|