VB6下利用API计算MD2 MD4 MD5 SHA1
来源:互联网 发布:虚拟q币充值软件 编辑:程序博客网 时间:2024/05/31 18:59
Public Const ALG_CLASS_HASH = 32768Public Const ALG_SID_MD2 = 1Public Const ALG_SID_MD4 = 2Public Const ALG_SID_MD5 = 3Public Const ALG_SID_SHA1 = 4Public Const ALG_TYPE_ANY = 0Public Const CRYPT_NEWKEYSET = 8Public Const HP_HASHVAL = 2Public Const HP_HASHSIZE = 4Public Const PROV_RSA_FULL = 1Public Declare Function CryptAcquireContext Lib "advapi32.dll" Alias "CryptAcquireContextA" (ByRef phProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, ByVal dwProvType As Long, ByVal dwFlags As Long) As LongPublic Declare Function CryptCreateHash Lib "advapi32.dll" (ByVal hProv As Long, ByVal Algid As Long, ByVal hKey As Long, ByVal dwFlags As Long, ByRef phHash As Long) As LongPublic Declare Function CryptDestroyHash Lib "advapi32.dll" (ByVal hHash As Long) As LongPublic Declare Function CryptGetHashParam Lib "advapi32.dll" (ByVal hHash As Long, ByVal dwParam As Long, pbData As Any, pdwDataLen As Long, ByVal dwFlags As Long) As LongPublic Declare Function CryptHashData Lib "advapi32.dll" (ByVal hHash As Long, pbData As Any, ByVal dwDataLen As Long, ByVal dwFlags As Long) As LongPublic Declare Function CryptReleaseContext Lib "advapi32.dll" (ByVal hProv As Long, ByVal dwFlags As Long) As LongPublic Function CryptStr(ByVal Str As String, Optional ByVal CryptMode As String = "md5") As String CryptStr = CryptByte(StrConv(Str, vbFromUnicode), CryptMode)End FunctionPublic Function CryptByte(ByRef Buffer() As Byte, Optional ByVal CryptMode As String = "md5") As String Dim Algorithm As Long, hCtx As Long, lRes As Long, hHash As Long, lLen As Long, abHash() As Byte Select Case LCase(CryptMode) Case "md2" Algorithm = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD2 Case "md4" Algorithm = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD4 Case "md5" Algorithm = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5 Case "sha1" Algorithm = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA1 Case Else Exit Function End Select If CryptAcquireContext(hCtx, vbNullString, vbNullString, PROV_RSA_FULL, 0) = 0 Then CryptAcquireContext hCtx, vbNullString, vbNullString, PROV_RSA_FULL, CRYPT_NEWKEYSET End If CryptCreateHash hCtx, Algorithm, 0, 0, hHash If UBound(Buffer) >= 0 Then CryptHashData hHash, Buffer(0), UBound(Buffer) + 1, 0 CryptGetHashParam hHash, HP_HASHSIZE, lLen, 4, 0 ReDim abHash(lLen - 1) CryptGetHashParam hHash, HP_HASHVAL, abHash(0), lLen, 0 CryptDestroyHash hHash CryptReleaseContext hCtx, 0 For lRes = 0 To UBound(abHash) CryptByte = CryptByte & Right("0" & Hex(abHash(lRes)), 2) Next Erase abHashEnd FunctionPublic Function CryptFile(ByVal FileName As String, Optional ByVal CryptMode As String = "md5", Optional ByVal BlockSize As Long = 327680) As String Dim Algorithm As Long, hCtx As Long, lRes As Long, hHash As Long, lLen As Long, abHash() As Byte, Data() As Byte, FN As Integer, FileSize As Long Select Case LCase(CryptMode) Case "md2" Algorithm = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD2 Case "md4" Algorithm = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD4 Case "md5" Algorithm = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5 Case "sha1" Algorithm = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA1 Case Else Exit Function End Select If CryptAcquireContext(hCtx, vbNullString, vbNullString, PROV_RSA_FULL, 0) = 0 Then CryptAcquireContext hCtx, vbNullString, vbNullString, PROV_RSA_FULL, CRYPT_NEWKEYSET End If CryptCreateHash hCtx, Algorithm, 0, 0, hHash FN = FreeFile ReDim Data(BlockSize - 1) Open FileName For Binary As FN FileSize = LOF(FN) Do While FileSize > 0 Get FN, , Data CryptHashData hHash, Data(0), IIf(FileSize > BlockSize, BlockSize, FileSize), 0 FileSize = FileSize - BlockSize Loop Erase Data Close FN CryptGetHashParam hHash, HP_HASHSIZE, lLen, 4, 0 ReDim abHash(lLen - 1) CryptGetHashParam hHash, HP_HASHVAL, abHash(0), lLen, 0 CryptDestroyHash hHash CryptReleaseContext hCtx, 0 For lRes = 0 To UBound(abHash) CryptFile = CryptFile & Right("0" & Hex(abHash(lRes)), 2) Next Erase abHashEnd Function
0 0
- VB6下利用API计算MD2 MD4 MD5 SHA1
- SQL 加密方法(MD5,SHA1,MD2,MD3,MD4等)
- java md5,md2,md4 加密算法
- 如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?
- 如何利用openssl来计算md4, md5, sha1, sha256, sha384, sha512等常用哈希值?
- 巧用OpenSSL完成md2、md4、md5、rmd160、sha、sha1等的验证
- HASH加密算法:MD4、MD5、SHA1
- JAVA:MD5-MD2计算
- 重新组织编写Delphi的MD2、MD4、MD5类
- Hash MSDN MD4 MD5 SHA1 CRC 详细解释
- 国外在线Md5,md4,mysql,Sha1,NTLM破解网站
- 利用 Windows Crypt API 获取 MD5/SHA1 值
- Powershell 下计算SHA1 以及MD5 摘要[转]
- Go计算MD5和SHA1
- 用OpenSSL 做HMAC(sha512/sha256/sha1/md5/sha224/sha384/sha/md2)
- Linux上计算MD5和SHA1
- linux计算文件的MD5 与 SHA1
- PHP计算MD5和SHA1值
- 透视学的应用(九)
- 事务四大特征:原子性,一致性,隔离性和持久性(ACID),四大acid
- Office 365之SharePoint文档库新UI
- 获取Linux内核未导出符号的几种方式
- 18.OpenGL--多级纹理
- VB6下利用API计算MD2 MD4 MD5 SHA1
- golang thrift 总结一下网络上的一些坑
- 剑指Offer---面试题21:包含min函数的栈
- AR开发入门:使用Vuforia SDK开发AR APP
- Java中正则表达式,截取字符串
- Intellij IDEA 15快捷键之二
- 安装使用SharePoint Online Management Shell的时候出现的问题
- mybatis批量insert的mapper xml写法
- BZOJ 2754: [SCOI2012]喵星球上的点名 后缀数组