找回密码  加入

QQ登录

只需一步,快速开始

AUTOIT CN

搜索
查看: 975|回复: 17

[原创] 有可能是au3获取MD5最简单的方法了

[复制链接]
发表于 2018-10-30 20:54:45 | 显示全部楼层 |阅读模式
本帖最后由 lpxx 于 2018-10-30 20:58 编辑

有可能是au3获取MD5最简单的方法了,支持中文。
  1. MsgBox(0, "MD5", _MD5("test"))
  2. Func _MD5($string)
  3.         Static Local $hDLL = DllOpen("advapi32.dll")
  4.         Static Local $MD5_CTX = DllStructCreate("dword i[2];dword buf[4];ubyte in[64];ubyte digest[16]")
  5.         DllCall($hDLL, "none", "MD5Init", "ptr", DllStructGetPtr($MD5_CTX))
  6.         DllCall($hDLL, "none", "MD5Update", "ptr", DllStructGetPtr($MD5_CTX), "str", $string, "dword", StringLen($string))
  7.         DllCall($hDLL, "none", "MD5Final", "ptr", DllStructGetPtr($MD5_CTX))
  8.         Return Hex(DllStructGetData($MD5_CTX, "digest"))
  9. EndFunc   ;==>_MD5
复制代码

 楼主| 发表于 2018-11-5 20:35:22 | 显示全部楼层
chishingchan 发表于 2018-11-2 19:34
有没有针对文件的而不是字符串?

大概这个样子
  1. Global $sFile
  2. Global $gui00 = GUICreate(" ", 325, 150, -1, -1)
  3. Global $inp01 = GUICtrlCreateInput("", 35, 25, 250, 20)
  4. Global $inp02 = GUICtrlCreateInput("", 35, 70, 250, 20)
  5. Global $btn01 = GUICtrlCreateButton("打开文件", 20, 115, 70, 25)
  6. Global $btn02 = GUICtrlCreateButton("复制", 125, 115, 70, 25)
  7. Global $btn03 = GUICtrlCreateButton("退出", 230, 115, 70, 25)
  8. GUISetState(@SW_SHOW, $gui00)
  9. ;
  10. While 1
  11.         $nMsg = GUIGetMsg()
  12.         Switch $nMsg
  13.                 Case -3, $btn03
  14.                         ExitLoop
  15.                 Case $btn01
  16.                         $sFile = FileOpenDialog("选择文件", @ScriptDir, "All Files (*.*)", 1)
  17.                         If $sFile Then
  18.                                 GUICtrlSetData($inp01, $sFile)
  19.                                 GUICtrlSetData($inp02, _MD5($sFile))
  20.                         Else
  21.                                 ContinueLoop
  22.                         EndIf
  23.                 Case $btn02
  24.                         ClipPut(GUICtrlRead($inp02))
  25.         EndSwitch
  26. WEnd
  27. GUIDelete($gui00)
  28. Exit

  29. Func _MD5($string)
  30.         Static Local $hDLL = DllOpen("advapi32.dll")
  31.         Static Local $MD5_CTX = DllStructCreate("dword i[2];dword buf[4];ubyte in[64];ubyte digest[16]")
  32.         DllCall($hDLL, "none", "MD5Init", "ptr", DllStructGetPtr($MD5_CTX))
  33.         DllCall($hDLL, "none", "MD5Update", "ptr", DllStructGetPtr($MD5_CTX), "str", $string, "dword", StringLen($string))
  34.         DllCall($hDLL, "none", "MD5Final", "ptr", DllStructGetPtr($MD5_CTX))
  35.         Return Hex(DllStructGetData($MD5_CTX, "digest"))
  36. EndFunc   ;==>_MD5
复制代码


评分

1

查看全部评分

回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2018-10-30 20:55:20 | 显示全部楼层
SHA的方法
  1. MsgBox(0, "SHA", _SHA("test"))

  2. Func _SHA($string)
  3.         Static Local $hDLL = DllOpen("advapi32.dll")
  4.         Static Local $SHA_CTX = DllStructCreate("dword unknown[6];dword state[5];dword count[2];ubyte buffer[64];ubyte digest[20]")
  5.         DllCall($hDLL, "none", "A_SHAInit", "ptr", DllStructGetPtr($SHA_CTX))
  6.         DllCall($hDLL, "none", "A_SHAUpdate", "ptr", DllStructGetPtr($SHA_CTX), "str", $string, "dword", StringLen($string))
  7.         DllCall($hDLL, "none", "A_SHAFinal", "ptr", DllStructGetPtr($SHA_CTX), "ptr", DllStructGetPtr($SHA_CTX) + 0x74)
  8.         Return Hex(DllStructGetData($SHA_CTX, "digest"))
  9. EndFunc   ;==>_SHA
复制代码
 楼主| 发表于 2018-10-30 20:55:51 | 显示全部楼层
本帖最后由 lpxx 于 2018-12-9 19:13 编辑

MD4的方法
  1. MsgBox(0, "MD4", _MD4("test"))
  2. Func _MD4($string)
  3.         Static Local $hDLL = DllOpen("advapi32.dll")
  4.         Static Local $MD4_CTX = DllStructCreate("dword i[2];dword buf[4];ubyte in[64];ubyte digest[16]")
  5.         DllCall($hDLL, "none", "MD4Init", "ptr", DllStructGetPtr($MD4_CTX))
  6.         DllCall($hDLL, "none", "MD4Update", "ptr", DllStructGetPtr($MD4_CTX), "str", $string, "dword", StringLen($string))
  7.         DllCall($hDLL, "none", "MD4Final", "ptr", DllStructGetPtr($MD4_CTX))
  8.         Return Hex(DllStructGetData($MD4_CTX, "digest"))
  9. EndFunc   ;==>_MD4
复制代码


Base64的方法
  1. $encoded = _Base64Encode("Autoit3.cn")
  2. MsgBox(0, 'Base64 Encoded', $encoded)

  3. $decoded = _Base64Decode($encoded)
  4. MsgBox(0, 'Base64解码 - 二进制', $decoded)
  5. MsgBox(0, 'Base64解码 - 字符串', BinaryToString($decoded))

  6. Func _Base64Encode($input)
  7.     $input = Binary($input)
  8.     Local $struct = DllStructCreate("byte[" & BinaryLen($input) & "]")
  9.     DllStructSetData($struct, 1, $input)
  10.     Local $strc = DllStructCreate("int")
  11.     Local $a_Call = DllCall("Crypt32.dll", "int", "CryptBinaryToString", "ptr", DllStructGetPtr($struct), "int", DllStructGetSize($struct), "int", 1, "ptr", 0, "ptr", DllStructGetPtr($strc))
  12.     If @error Or Not $a_Call[0] Then
  13.         Return SetError(1, 0, "")
  14.     EndIf
  15.     Local $a = DllStructCreate("char[" & DllStructGetData($strc, 1) & "]")
  16.     $a_Call = DllCall("Crypt32.dll", "int", "CryptBinaryToString", "ptr", DllStructGetPtr($struct), "int", DllStructGetSize($struct), "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($strc))
  17.     If @error Or Not $a_Call[0] Then
  18.         Return SetError(2, 0, "")
  19.     EndIf
  20.     Return DllStructGetData($a, 1)
  21. EndFunc   ;==>_Base64Encode

  22. Func _Base64Decode($input_string)
  23.     Local $struct = DllStructCreate("int")
  24.     $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
  25.     If @error Or Not $a_Call[0] Then
  26.         Return SetError(1, 0, "")
  27.     EndIf
  28.     Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]")
  29.     $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
  30.     If @error Or Not $a_Call[0] Then
  31.         Return SetError(2, 0, "")
  32.     EndIf
  33.     Return DllStructGetData($a, 1)
  34. EndFunc   ;==>_Base64Decode
复制代码


发表于 2018-10-31 08:21:12 | 显示全部楼层
赞一个,谢谢分享
发表于 2018-10-31 08:31:38 | 显示全部楼层
thanks for share..
发表于 2018-10-31 10:00:21 | 显示全部楼层
不错,好方法,谢谢了
发表于 2018-10-31 11:01:54 | 显示全部楼层
收藏一下,这个好
发表于 2018-10-31 11:25:37 | 显示全部楼层
看楼主签名就知道人很大方~~
发表于 2018-10-31 14:22:01 | 显示全部楼层
留下脚印,以后查找
发表于 2018-10-31 15:02:05 | 显示全部楼层
感谢楼主分享~
发表于 2018-11-1 09:10:56 | 显示全部楼层
收藏一下,终于看到实用又不收费的了
发表于 2018-11-2 19:15:24 | 显示全部楼层
学习一下,谢谢分享
发表于 2018-11-2 19:34:59 | 显示全部楼层
有没有针对文件的而不是字符串?
发表于 2018-11-3 12:51:53 | 显示全部楼层
钱是个东西啊,为啥 不收点费呢。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2019-11-15 02:35 , Processed in 0.078124 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表