永发信息网

vb MD5 加密算法 谁有个例子啊

答案:2  悬赏:70  手机版
解决时间 2021-07-25 23:07

有的话谢谢了:devilxf@126.com

最佳答案

调用:


strMD5=MD5(“ABCD”, 16)


模块:



Public Const BITS_TO_A_BYTE = 8
Public Const BYTES_TO_A_WORD = 4
Public Const BITS_TO_A_WORD = 32


Public m_lOnBits(30)
Public m_l2Power(30)
Public Function LShift(lValue, iShiftBits)
If iShiftBits = 0 Then
LShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And 1 Then
LShift = &H80000000
Else
LShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If


If (lValue And m_l2Power(31 - iShiftBits)) Then
LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
Else
LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
End If
End Function


Public Function RShift(lValue, iShiftBits)
If iShiftBits = 0 Then
RShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And &H80000000 Then
RShift = 1
Else
RShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If

RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)


If (lValue And &H80000000) Then
RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
End If
End Function


Public Function RotateLeft(lValue, iShiftBits)
RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
End Function


Public Function AddUnsigned(lX, lY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim lResult


lX8 = lX And &H80000000
lY8 = lY And &H80000000
lX4 = lX And &H40000000
lY4 = lY And &H40000000


lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)


If lX4 And lY4 Then
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And &H40000000 Then
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
Else
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
End If
Else
lResult = lResult Xor lX8 Xor lY8
End If


AddUnsigned = lResult
End Function


Public Function md5_F(x, y, z)
md5_F = (x And y) Or ((Not x) And z)
End Function


Public Function md5_G(x, y, z)
md5_G = (x And z) Or (y And (Not z))
End Function


Public Function md5_H(x, y, z)
md5_H = (x Xor y Xor z)
End Function


Public Function md5_I(x, y, z)
md5_I = (y Xor (x Or (Not z)))
End Function


Public Sub md5_FF(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub


Public Sub md5_GG(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub


Public Sub md5_HH(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub


Public Sub md5_II(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub


Public Function ConvertToWordArray(sMessage)
Dim lMessageLength
Dim lNumberOfWords
Dim lWordArray()
Dim lBytePosition
Dim lByteCount
Dim lWordCount

Const MODULUS_BITS = 512
Const CONGRUENT_BITS = 448

lMessageLength = Len(sMessage)

lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
ReDim lWordArray(lNumberOfWords - 1)

lBytePosition = 0
lByteCount = 0
Do Until lByteCount >= lMessageLength
lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
lByteCount = lByteCount + 1
Loop


lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE


lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)


lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)

ConvertToWordArray = lWordArray
End Function


Public Function WordToHex(lValue)
Dim lByte
Dim lCount

For lCount = 0 To 3
lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)
WordToHex = WordToHex & Right("0" & Hex(lByte), 2)
Next
End Function



全部回答
已经把MD5模块发到你邮箱了,我的邮箱是MASM32的那个。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
河北涿州玉米收购点
打篮球弄得膝盖疼,怎么按摩管用
为什么人们喜欢莲?有多少人喜欢莲?
某物体做匀速直线运动,从速度公式V=s/t可知
现在杭州到宁波的汽车,有没有搬到九堡去?
德邦物流工资多少,德邦物流专员怎么样?
NOKIA1680c什么价位
哪位球迷朋友、实况迷朋友能告诉我哪里可以下
我家的电脑怎么老是死机啊?急死我了,都不能
学校旁的饭都吃厌了怎么 办啊?
衡水市11月份3200元左右的电脑配置
Antoine de Saint-Exupéry的《小王子》中蘊
大学生登山节的赞助建议书
QQ农场的地开完了,还能干什么?
请问NOKIA 73怎样,请各高手请教
推荐资讯
QQ魔域好玩还是QQ魔界好玩
为什么有那么的人喜欢吃蕃薯的?
关于input中name以及value属性
谁是黄钻VIP2以上,邀请我牧场好吗?
索爱手机问题,谢谢
DNF正规G哪里有卖 好用点的 要单刷带人的那种
温州到佛山坐客车要多久能够到达
我开cool edit pro 2.1的时候老是跑去一个临
海边放松心情语句,描写浪漫的句子
呼吸时肺部连同背部会痛 呼吸时可以清楚的感
全球著名的医科大学?
如果把分式x+2y/x+y中的x和y都变为原来的1/3,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?