时间:2021-07-01 10:21:17 帮助过:39人阅读
- <br><% <br>Private Const BITS_TO_A_BYTE = 8 <br>Private Const BYTES_TO_A_WORD = 4 <br>Private Const BITS_TO_A_WORD = 32 <br>Class Cls_Encrypt <br>Private MD5_m_lOnBits(30) <br>Private MD5_m_l2Power(30) <br>Private SHA256_m_lOnBits(30) <br>Private SHA256_m_l2Power(30) <br>Private SHA256_K(63) <br>Private Sub Class_Initialize <br>MD5_m_lOnBits(0) = CLng(1) <br>MD5_m_lOnBits(1) = CLng(3) <br>MD5_m_lOnBits(2) = CLng(7) <br>MD5_m_lOnBits(3) = CLng(15) <br>MD5_m_lOnBits(4) = CLng(31) <br>MD5_m_lOnBits(5) = CLng(63) <br>MD5_m_lOnBits(6) = CLng(127) <br>MD5_m_lOnBits(7) = CLng(255) <br>MD5_m_lOnBits(8) = CLng(511) <br>MD5_m_lOnBits(9) = CLng(1023) <br>MD5_m_lOnBits(10) = CLng(2047) <br>MD5_m_lOnBits(11) = CLng(4095) <br>MD5_m_lOnBits(12) = CLng(8191) <br>MD5_m_lOnBits(13) = CLng(16383) <br>MD5_m_lOnBits(14) = CLng(32767) <br>MD5_m_lOnBits(15) = CLng(65535) <br>MD5_m_lOnBits(16) = CLng(131071) <br>MD5_m_lOnBits(17) = CLng(262143) <br>MD5_m_lOnBits(18) = CLng(524287) <br>MD5_m_lOnBits(19) = CLng(1048575) <br>MD5_m_lOnBits(20) = CLng(2097151) <br>MD5_m_lOnBits(21) = CLng(4194303) <br>MD5_m_lOnBits(22) = CLng(8388607) <br>MD5_m_lOnBits(23) = CLng(16777215) <br>MD5_m_lOnBits(24) = CLng(33554431) <br>MD5_m_lOnBits(25) = CLng(67108863) <br>MD5_m_lOnBits(26) = CLng(134217727) <br>MD5_m_lOnBits(27) = CLng(268435455) <br>MD5_m_lOnBits(28) = CLng(536870911) <br>MD5_m_lOnBits(29) = CLng(1073741823) <br>MD5_m_lOnBits(30) = CLng(2147483647) <br>MD5_m_l2Power(0) = CLng(1) <br>MD5_m_l2Power(1) = CLng(2) <br>MD5_m_l2Power(2) = CLng(4) <br>MD5_m_l2Power(3) = CLng(8) <br>MD5_m_l2Power(4) = CLng(16) <br>MD5_m_l2Power(5) = CLng(32) <br>MD5_m_l2Power(6) = CLng(64) <br>MD5_m_l2Power(7) = CLng(128) <br>MD5_m_l2Power(8) = CLng(256) <br>MD5_m_l2Power(9) = CLng(512) <br>MD5_m_l2Power(10) = CLng(1024) <br>MD5_m_l2Power(11) = CLng(2048) <br>MD5_m_l2Power(12) = CLng(4096) <br>MD5_m_l2Power(13) = CLng(8192) <br>MD5_m_l2Power(14) = CLng(16384) <br>MD5_m_l2Power(15) = CLng(32768) <br>MD5_m_l2Power(16) = CLng(65536) <br>MD5_m_l2Power(17) = CLng(131072) <br>MD5_m_l2Power(18) = CLng(262144) <br>MD5_m_l2Power(19) = CLng(524288) <br>MD5_m_l2Power(20) = CLng(1048576) <br>MD5_m_l2Power(21) = CLng(2097152) <br>MD5_m_l2Power(22) = CLng(4194304) <br>MD5_m_l2Power(23) = CLng(8388608) <br>MD5_m_l2Power(24) = CLng(16777216) <br>MD5_m_l2Power(25) = CLng(33554432) <br>MD5_m_l2Power(26) = CLng(67108864) <br>MD5_m_l2Power(27) = CLng(134217728) <br>MD5_m_l2Power(28) = CLng(268435456) <br>MD5_m_l2Power(29) = CLng(536870912) <br>MD5_m_l2Power(30) = CLng(1073741824) <br>SHA256_m_lOnBits(0) = CLng(1) <br>SHA256_m_lOnBits(1) = CLng(3) <br>SHA256_m_lOnBits(2) = CLng(7) <br>SHA256_m_lOnBits(3) = CLng(15) <br>SHA256_m_lOnBits(4) = CLng(31) <br>SHA256_m_lOnBits(5) = CLng(63) <br>SHA256_m_lOnBits(6) = CLng(127) <br>SHA256_m_lOnBits(7) = CLng(255) <br>SHA256_m_lOnBits(8) = CLng(511) <br>SHA256_m_lOnBits(9) = CLng(1023) <br>SHA256_m_lOnBits(10) = CLng(2047) <br>SHA256_m_lOnBits(11) = CLng(4095) <br>SHA256_m_lOnBits(12) = CLng(8191) <br>SHA256_m_lOnBits(13) = CLng(16383) <br>SHA256_m_lOnBits(14) = CLng(32767) <br>SHA256_m_lOnBits(15) = CLng(65535) <br>SHA256_m_lOnBits(16) = CLng(131071) <br>SHA256_m_lOnBits(17) = CLng(262143) <br>SHA256_m_lOnBits(18) = CLng(524287) <br>SHA256_m_lOnBits(19) = CLng(1048575) <br>SHA256_m_lOnBits(20) = CLng(2097151) <br>SHA256_m_lOnBits(21) = CLng(4194303) <br>SHA256_m_lOnBits(22) = CLng(8388607) <br>SHA256_m_lOnBits(23) = CLng(16777215) <br>SHA256_m_lOnBits(24) = CLng(33554431) <br>SHA256_m_lOnBits(25) = CLng(67108863) <br>SHA256_m_lOnBits(26) = CLng(134217727) <br>SHA256_m_lOnBits(27) = CLng(268435455) <br>SHA256_m_lOnBits(28) = CLng(536870911) <br>SHA256_m_lOnBits(29) = CLng(1073741823) <br>SHA256_m_lOnBits(30) = CLng(2147483647) <br>SHA256_m_l2Power(0) = CLng(1) <br>SHA256_m_l2Power(1) = CLng(2) <br>SHA256_m_l2Power(2) = CLng(4) <br>SHA256_m_l2Power(3) = CLng(8) <br>SHA256_m_l2Power(4) = CLng(16) <br>SHA256_m_l2Power(5) = CLng(32) <br>SHA256_m_l2Power(6) = CLng(64) <br>SHA256_m_l2Power(7) = CLng(128) <br>SHA256_m_l2Power(8) = CLng(256) <br>SHA256_m_l2Power(9) = CLng(512) <br>SHA256_m_l2Power(10) = CLng(1024) <br>SHA256_m_l2Power(11) = CLng(2048) <br>SHA256_m_l2Power(12) = CLng(4096) <br>SHA256_m_l2Power(13) = CLng(8192) <br>SHA256_m_l2Power(14) = CLng(16384) <br>SHA256_m_l2Power(15) = CLng(32768) <br>SHA256_m_l2Power(16) = CLng(65536) <br>SHA256_m_l2Power(17) = CLng(131072) <br>SHA256_m_l2Power(18) = CLng(262144) <br>SHA256_m_l2Power(19) = CLng(524288) <br>SHA256_m_l2Power(20) = CLng(1048576) <br>SHA256_m_l2Power(21) = CLng(2097152) <br>SHA256_m_l2Power(22) = CLng(4194304) <br>SHA256_m_l2Power(23) = CLng(8388608) <br>SHA256_m_l2Power(24) = CLng(16777216) <br>SHA256_m_l2Power(25) = CLng(33554432) <br>SHA256_m_l2Power(26) = CLng(67108864) <br>SHA256_m_l2Power(27) = CLng(134217728) <br>SHA256_m_l2Power(28) = CLng(268435456) <br>SHA256_m_l2Power(29) = CLng(536870912) <br>SHA256_m_l2Power(30) = CLng(1073741824) <br>SHA256_K(0) = &H428A2F98 <br>SHA256_K(1) = &H71374491 <br>SHA256_K(2) = &HB5C0FBCF <br>SHA256_K(3) = &HE9B5DBA5 <br>SHA256_K(4) = &H3956C25B <br>SHA256_K(5) = &H59F111F1 <br>SHA256_K(6) = &H923F82A4 <br>SHA256_K(7) = &HAB1C5ED5 <br>SHA256_K(8) = &HD807AA98 <br>SHA256_K(9) = &H12835B01 <br>SHA256_K(10) = &H243185BE <br>SHA256_K(11) = &H550C7DC3 <br>SHA256_K(12) = &H72BE5D74 <br>SHA256_K(13) = &H80DEB1FE <br>SHA256_K(14) = &H9BDC06A7 <br>SHA256_K(15) = &HC19BF174 <br>SHA256_K(16) = &HE49B69C1 <br>SHA256_K(17) = &HEFBE4786 <br>SHA256_K(18) = &HFC19DC6 <br>SHA256_K(19) = &H240CA1CC <br>SHA256_K(20) = &H2DE92C6F <br>SHA256_K(21) = &H4A7484AA <br>SHA256_K(22) = &H5CB0A9DC <br>SHA256_K(23) = &H76F988DA <br>SHA256_K(24) = &H983E5152 <br>SHA256_K(25) = &HA831C66D <br>SHA256_K(26) = &HB00327C8 <br>SHA256_K(27) = &HBF597FC7 <br>SHA256_K(28) = &HC6E00BF3 <br>SHA256_K(29) = &HD5A79147 <br>SHA256_K(30) = &H6CA6351 <br>SHA256_K(31) = &H14292967 <br>SHA256_K(32) = &H27B70A85 <br>SHA256_K(33) = &H2E1B2138 <br>SHA256_K(34) = &H4D2C6DFC <br>SHA256_K(35) = &H53380D13 <br>SHA256_K(36) = &H650A7354 <br>SHA256_K(37) = &H766A0ABB <br>SHA256_K(38) = &H81C2C92E <br>SHA256_K(39) = &H92722C85 <br>SHA256_K(40) = &HA2BFE8A1 <br>SHA256_K(41) = &HA81A664B <br>SHA256_K(42) = &HC24B8B70 <br>SHA256_K(43) = &HC76C51A3 <br>SHA256_K(44) = &HD192E819 <br>SHA256_K(45) = &HD6990624 <br>SHA256_K(46) = &HF40E3585 <br>SHA256_K(47) = &H106AA070 <br>SHA256_K(48) = &H19A4C116 <br>SHA256_K(49) = &H1E376C08 <br>SHA256_K(50) = &H2748774C <br>SHA256_K(51) = &H34B0BCB5 <br>SHA256_K(52) = &H391C0CB3 <br>SHA256_K(53) = &H4ED8AA4A <br>SHA256_K(54) = &H5B9CCA4F <br>SHA256_K(55) = &H682E6FF3 <br>SHA256_K(56) = &H748F82EE <br>SHA256_K(57) = &H78A5636F <br>SHA256_K(58) = &H84C87814 <br>SHA256_K(59) = &H8CC70208 <br>SHA256_K(60) = &H90BEFFFA <br>SHA256_K(61) = &HA4506CEB <br>SHA256_K(62) = &HBEF9A3F7 <br>SHA256_K(63) = &HC67178F2 <br>End Sub <br>Private Sub Class_Terminate <br>End Sub <br>'字符传转换数组函数 <br>Private Function ConvertToWordArray(byVal sMessage) <br>Dim lMessageLength <br>Dim lNumberOfWords <br>Dim lWordArray() <br>Dim lBytePosition <br>Dim lByteCount <br>Dim lWordCount <br>Const MODULUS_BITS = 512 <br>Const CONGRUENT_BITS = 448 <br>lMessageLength = Len(sMessage) <br>lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD) <br>ReDim lWordArray(lNumberOfWords - 1) <br>lBytePosition = 0 <br>lByteCount = 0 <br>Do Until lByteCount >= lMessageLength <br>lWordCount = lByteCount \ BYTES_TO_A_WORD <br>lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE <br>lWordArray(lWordCount) = lWordArray(lWordCount) or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition) <br>lByteCount = lByteCount + 1 <br>Loop <br>lWordCount = lByteCount \ BYTES_TO_A_WORD <br>lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE <br>lWordArray(lWordCount) = lWordArray(lWordCount) or LShift(&H80, lBytePosition) <br>lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3) <br>lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29) <br>ConvertToWordArray = lWordArray <br>End Function <br><br>'字符串左移位主函数 <br>Private Function LShift(byVal lValue, byVal iShiftBits) <br>If iShiftBits = 0 Then <br>LShift = lValue <br>Exit Function <br>ElseIf iShiftBits = 31 Then <br>If lValue And 1 Then <br>LShift = &H80000000 <br>Else <br>LShift = 0 <br>End If <br>Exit Function <br>ElseIf iShiftBits < 0 or iShiftBits > 31 Then <br>Err.Raise 6 <br>End If <br>If (lValue And MD5_m_l2Power(31 - iShiftBits)) Then <br>LShift = ((lValue And MD5_m_lOnBits(31 - (iShiftBits + 1))) * MD5_m_l2Power(iShiftBits)) or &H80000000 <br>Else <br>LShift = ((lValue And MD5_m_lOnBits(31 - iShiftBits)) * MD5_m_l2Power(iShiftBits)) <br>End If <br>End Function <br>'字符串右移位主函数 <br>Private Function RShift(byVal lValue, byVal iShiftBits) <br>If iShiftBits = 0 Then <br>RShift = lValue <br>Exit Function <br>ElseIf iShiftBits = 31 Then <br>If lValue And &H80000000 Then <br>RShift = 1 <br>Else <br>RShift = 0 <br>End If <br>Exit Function <br>ElseIf iShiftBits < 0 or iShiftBits > 31 Then <br>Err.Raise 6 <br>End If <br>RShift = (lValue And &H7FFFFFFE) \ MD5_m_l2Power(iShiftBits) <br>If (lValue And &H80000000) Then <br>RShift = (RShift or (&H40000000 \ MD5_m_l2Power(iShiftBits - 1))) <br>End If <br>End Function <br>'字符串偏移转换,通过左右移位函数实现 <br>Private Function RotateLeft(byVal lValue, byVal iShiftBits) <br>RotateLeft = LShift(lValue, iShiftBits) or RShift(lValue, (32 - iShiftBits)) <br>End Function <br>'追加无符号16进制编码 <br>Private Function AddUnsigned(byVal lX, byVal lY) <br>Dim lX4 <br>Dim lY4 <br>Dim lX8 <br>Dim lY8 <br>Dim lResult <br>lX8 = lX And &H80000000 <br>lY8 = lY And &H80000000 <br>lX4 = lX And &H40000000 <br>lY4 = lY And &H40000000 <br>lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) <br>If lX4 And lY4 Then <br>lResult = lResult Xor &H80000000 Xor lX8 Xor lY8 <br>ElseIf lX4 or lY4 Then <br>If lResult And &H40000000 Then <br>lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8 <br>Else <br>lResult = lResult Xor &H40000000 Xor lX8 Xor lY8 <br>End If <br>Else <br>lResult = lResult Xor lX8 Xor lY8 <br>End If <br>AddUnsigned = lResult <br>End Function <br><br>'MD5_FF,MD5_GG,MD5_HH,MD5_II MD5主编码函数 <br>Private Sub MD5_FF(a, b, c, d, x, s, ac) <br>a = AddUnsigned(a, AddUnsigned(AddUnsigned(MD5_F(b, c, d), x), ac)) <br>a = RotateLeft(a, s) <br>a = AddUnsigned(a, b) <br>End Sub <br>Private Sub MD5_GG(a, b, c, d, x, s, ac) <br>a = AddUnsigned(a, AddUnsigned(AddUnsigned(MD5_G(b, c, d), x), ac)) <br>a = RotateLeft(a, s) <br>a = AddUnsigned(a, b) <br>End Sub <br>Private Sub MD5_HH(a, b, c, d, x, s, ac) <br>a = AddUnsigned(a, AddUnsigned(AddUnsigned(MD5_H(b, c, d), x), ac)) <br>a = RotateLeft(a, s) <br>a = AddUnsigned(a, b) <br>End Sub <br>Private Sub MD5_II(a, b, c, d, x, s, ac) <br>a = AddUnsigned(a, AddUnsigned(AddUnsigned(MD5_I(b, c, d), x), ac)) <br>a = RotateLeft(a, s) <br>a = AddUnsigned(a, b) <br>End Sub <br><br>'MD5_F,MD5_G,MD5_H,MD5_I MD5辅编码函数 <br>Private Function MD5_F(x, y, z) <br>MD5_F = (x And y) or ((Not x) And z) <br>End Function <br>Private Function MD5_G(x, y, z) <br>MD5_G = (x And z) or (y And (Not z)) <br>End Function <br>Private Function MD5_H(x, y, z) <br>MD5_H = (x Xor y Xor z) <br>End Function <br>Private Function MD5_I(x, y, z) <br>MD5_I = (y Xor (x or (Not z))) <br>End Function <br><br>'16进制编码转换 <br>Private Function WordToHex(byVal lValue) <br>Dim lByte <br>Dim lCount <br>For lCount = 0 To 3 <br>lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And MD5_m_lOnBits(BITS_TO_A_BYTE - 1) <br>WordToHex = WordToHex & Right("0" & Hex(lByte), 2) <br>Next <br>End Function <br><br>'MD5主函数 MD5(字符串,编码位) <br>Public Function MD5(byVal sMessage, byVal sType) <br>Dim x <br>Dim k <br>Dim AA <br>Dim BB <br>Dim CC <br>Dim DD <br>Dim a <br>Dim b <br>Dim c <br>Dim d <br>Const S11 = 7 <br>Const S12 = 12 <br>Const S13 = 17 <br>Const S14 = 22 <br>Const S21 = 5 <br>Const S22 = 9 <br>Const S23 = 14 <br>Const S24 = 20 <br>Const S31 = 4 <br>Const S32 = 11 <br>Const S33 = 16 <br>Const S34 = 23 <br>Const S41 = 6 <br>Const S42 = 10 <br>Const S43 = 15 <br>Const S44 = 21 <br>x = ConvertToWordArray(sMessage) '加密步骤1:数组转换 <br>a = &H67452301 <br>b = &HEFCDAB89 <br>c = &H98BADCFE <br>d = &H10325476 <br>For k = 0 To UBound(x) Step 16 <br>AA = a <br>BB = b <br>CC = c <br>DD = d <br>'加密步骤2:编码转换 <br>MD5_FF a, b, c, d, x(k + 0), S11, &HD76AA478 <br>MD5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756 <br>MD5_FF c, d, a, b, x(k + 2), S13, &H242070DB <br>MD5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE <br>MD5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF <br>MD5_FF d, a, b, c, x(k + 5), S12, &H4787C62A <br>MD5_FF c, d, a, b, x(k + 6), S13, &HA8304613 <br>MD5_FF b, c, d, a, x(k + 7), S14, &HFD469501 <br>MD5_FF a, b, c, d, x(k + 8), S11, &H698098D8 <br>MD5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF <br>MD5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1 <br>MD5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE <br>MD5_FF a, b, c, d, x(k + 12), S11, &H6B901122 <br>MD5_FF d, a, b, c, x(k + 13), S12, &HFD987193 <br>MD5_FF c, d, a, b, x(k + 14), S13, &HA679438E <br>MD5_FF b, c, d, a, x(k + 15), S14, &H49B40821 <br>MD5_GG a, b, c, d, x(k + 1), S21, &HF61E2562 <br>MD5_GG d, a, b, c, x(k + 6), S22, &HC040B340 <br>MD5_GG c, d, a, b, x(k + 11), S23, &H265E5A51 <br>MD5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA <br>MD5_GG a, b, c, d, x(k + 5), S21, &HD62F105D <br>MD5_GG d, a, b, c, x(k + 10), S22, &H2441453 <br>MD5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681 <br>MD5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8 <br>MD5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6 <br>MD5_GG d, a, b, c, x(k + 14), S22, &HC33707D6 <br>MD5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87 <br>MD5_GG b, c, d, a, x(k + 8), S24, &H455A14ED <br>MD5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905 <br>MD5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8 <br>MD5_GG c, d, a, b, x(k + 7), S23, &H676F02D9 <br>MD5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A <br>MD5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942 <br>MD5_HH d, a, b, c, x(k + 8), S32, &H8771F681 <br>MD5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122 <br>MD5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C <br>MD5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44 <br>MD5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9 <br>MD5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60 <br>MD5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70 <br>MD5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6 <br>MD5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA <br>MD5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085 <br>MD5_HH b, c, d, a, x(k + 6), S34, &H4881D05 <br>MD5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039 <br>MD5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5 <br>MD5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8 <br>MD5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665 <br>MD5_II a, b, c, d, x(k + 0), S41, &HF4292244 <br>MD5_II d, a, b, c, x(k + 7), S42, &H432AFF97 <br>MD5_II c, d, a, b, x(k + 14), S43, &HAB9423A7 <br>MD5_II b, c, d, a, x(k + 5), S44, &HFC93A039 <br>MD5_II a, b, c, d, x(k + 12), S41, &H655B59C3 <br>MD5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92 <br>MD5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D <br>MD5_II b, c, d, a, x(k + 1), S44, &H85845DD1 <br>MD5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F <br>MD5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0 <br>MD5_II c, d, a, b, x(k + 6), S43, &HA3014314 <br>MD5_II b, c, d, a, x(k + 13), S44, &H4E0811A1 <br>MD5_II a, b, c, d, x(k + 4), S41, &HF7537E82 <br>MD5_II d, a, b, c, x(k + 11), S42, &HBD3AF235 <br>MD5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB <br>MD5_II b, c, d, a, x(k + 9), S44, &HEB86D391 <br>'加密步骤3:追加无符号转换 <br>a = AddUnsigned(a, AA) <br>b = AddUnsigned(b, BB) <br>c = AddUnsigned(c, CC) <br>d = AddUnsigned(d, DD) <br>Next <br>If sType = 32 Then <br>'加密步骤4:分割合并各8位16进制转换 <br>MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)) <br>Else <br>MD5 = LCase(WordToHex(b) & WordToHex(c)) <br>End If <br>End Function <br>Private Function SHA256_LShift(byVal lValue, byVal iShiftBits) <br>If iShiftBits = 0 Then <br>SHA256_LShift = lValue <br>Exit Function <br>ElseIf iShiftBits = 31 Then <br>If lValue And 1 Then <br>SHA256_LShift = &H80000000 <br>Else <br>SHA256_LShift = 0 <br>End If <br>Exit Function <br>ElseIf iShiftBits < 0 or iShiftBits > 31 Then <br>Err.Raise 6 <br>End If <br>If (lValue And SHA256_m_l2Power(31 - iShiftBits)) Then <br>SHA256_LShift = ((lValue And SHA256_m_lOnBits(31 - (iShiftBits + 1))) * SHA256_m_l2Power(iShiftBits)) or &H80000000 <br>Else <br>SHA256_LShift = ((lValue And SHA256_m_lOnBits(31 - iShiftBits)) * SHA256_m_l2Power(iShiftBits)) <br>End If <br>End Function <br>Private Function SHA256_RShift(byVal lValue, byVal iShiftBits) <br>If iShiftBits = 0 Then <br>SHA256_RShift = lValue <br>Exit Function <br>ElseIf iShiftBits = 31 Then <br>If lValue And &H80000000 Then <br>SHA256_RShift = 1 <br>Else <br>SHA256_RShift = 0 <br>End If <br>Exit Function <br>ElseIf iShiftBits < 0 or iShiftBits > 31 Then <br>Err.Raise 6 <br>End If <br>SHA256_RShift = (lValue And &H7FFFFFFE) \ SHA256_m_l2Power(iShiftBits) <br>If (lValue And &H80000000) Then <br>SHA256_RShift = (SHA256_RShift or (&H40000000 \ SHA256_m_l2Power(iShiftBits - 1))) <br>End If <br>End Function <br>Private Function SHA256_AddUnsigned(byVal lX, byVal lY) <br>Dim lX4 <br>Dim lY4 <br>Dim lX8 <br>Dim lY8 <br>Dim lResult <br>lX8 = lX And &H80000000 <br>lY8 = lY And &H80000000 <br>lX4 = lX And &H40000000 <br>lY4 = lY And &H40000000 <br>lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) <br>If lX4 And lY4 Then <br>lResult = lResult Xor &H80000000 Xor lX8 Xor lY8 <br>ElseIf lX4 or lY4 Then <br>If lResult And &H40000000 Then <br>lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8 <br>Else <br>lResult = lResult Xor &H40000000 Xor lX8 Xor lY8 <br>End If <br>Else <br>lResult = lResult Xor lX8 Xor lY8 <br>End If <br>SHA256_AddUnsigned = lResult <br>End Function <br>Private Function SHA256_CH(x, y, z) <br>SHA256_Ch = ((x And y) Xor ((Not x) And z)) <br>End Function <br>Private Function SHA256_Maj(x, y, z) <br>SHA256_Maj = ((x And y) Xor (x And z) Xor (y And z)) <br>End Function <br>Private Function SHA256_S(x, n) <br>SHA256_S = (SHA256_RShift(x, (n And SHA256_m_lOnBits(4))) or SHA256_LShift(x, (32 - (n And SHA256_m_lOnBits(4))))) <br>End Function <br>Private Function SHA256_R(x, n) <br>SHA256_R = SHA256_RShift(x, cLng(n And SHA256_m_lOnBits(4))) <br>End Function <br>Private Function SHA256_Sigma0(x) <br>SHA256_Sigma0 = (SHA256_S(x, 2) Xor SHA256_S(x, 13) Xor SHA256_S(x, 22)) <br>End Function <br>Private Function SHA256_Sigma1(x) <br>SHA256_Sigma1 = (SHA256_S(x, 6) Xor SHA256_S(x, 11) Xor SHA256_S(x, 25)) <br>End Function <br>Private Function SHA256_Gamma0(x) <br>SHA256_Gamma0 = (SHA256_S(x, 7) Xor SHA256_S(x, 18) Xor SHA256_R(x, 3)) <br>End Function <br>Private Function SHA256_Gamma1(x) <br>SHA256_Gamma1 = (SHA256_S(x, 17) Xor SHA256_S(x, 19) Xor SHA256_R(x, 10)) <br>End Function <br>Private Function SHA256_ConvertToWordArray(byVal sMessage) <br>Dim lMessageLength <br>Dim lNumberOfWords <br>Dim lWordArray() <br>Dim lBytePosition <br>Dim lByteCount <br>Dim lWordCount <br>Dim lByte <br>Const MODULUS_BITS = 512 <br>Const CONGRUENT_BITS = 448 <br>lMessageLength = Len(sMessage) <br>lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD) <br>ReDim lWordArray(lNumberOfWords - 1) <br>lBytePosition = 0 <br>lByteCount = 0 <br>Do Until lByteCount >= lMessageLength <br>lWordCount = lByteCount \ BYTES_TO_A_WORD <br>lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE <br>lByte = AscB(Mid(sMessage, lByteCount + 1, 1)) <br>lWordArray(lWordCount) = lWordArray(lWordCount) or SHA256_LShift(lByte, lBytePosition) <br>lByteCount = lByteCount + 1 <br>Loop <br>lWordCount = lByteCount \ BYTES_TO_A_WORD <br>lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE <br>lWordArray(lWordCount) = lWordArray(lWordCount) or SHA256_LShift(&H80, lBytePosition) <br>lWordArray(lNumberOfWords - 1) = SHA256_LShift(lMessageLength, 3) <br>lWordArray(lNumberOfWords - 2) = SHA256_RShift(lMessageLength, 29) <br>SHA256_ConvertToWordArray = lWordArray <br>End Function <br><br>' ========================================================================================== <br>' SHA256 加密算法 <br>' ======================================================================================== <br>' 调用方法: <br>' SHA256(sMessage, p_Len) <br>' p_Len控制生成字符串长度,1为8位,2为16位,最大取值为8,即加密后长度为64位 <br>' 控制 8 位\16 位\24 位\32 位\40 位\48 位\56 位\64 位加密 <br>Public Function SHA256(byVal sMessage, byVal p_Len) <br>Dim HASH(7) <br>Dim M <br>Dim W(63) <br>Dim a <br>Dim b <br>Dim c <br>Dim d <br>Dim e <br>Dim f <br>Dim g <br>Dim h <br>Dim i <br>Dim j <br>Dim T1 <br>Dim T2 <br>HASH(0) = &H6A09E667 <br>HASH(1) = &HBB67AE85 <br>HASH(2) = &H3C6EF372 <br>HASH(3) = &HA54FF53A <br>HASH(4) = &H510E527F <br>HASH(5) = &H9B05688C <br>HASH(6) = &H1F83D9AB <br>HASH(7) = &H5BE0CD19 <br>M = SHA256_ConvertToWordArray(sMessage) <br>For i = 0 To UBound(M) Step 16 <br>a = HASH(0) <br>b = HASH(1) <br>c = HASH(2) <br>d = HASH(3) <br>e = HASH(4) <br>f = HASH(5) <br>g = HASH(6) <br>h = HASH(7) <br>For j = 0 To 63 <br>If j < 16 Then <br>W(j) = M(j + i) <br>Else <br>W(j) = SHA256_AddUnsigned(SHA256_AddUnsigned(SHA256_AddUnsigned(SHA256_Gamma1(W(j - 2)), W(j - 7)), SHA256_Gamma0(W(j - 15))), W(j - 16)) <br>End If <br>T1 = SHA256_AddUnsigned(SHA256_AddUnsigned(SHA256_AddUnsigned(SHA256_AddUnsigned(h, SHA256_Sigma1(e)), SHA256_CH(e, f, g)), SHA256_K(j)), W(j)) <br>T2 = SHA256_AddUnsigned(SHA256_Sigma0(a), SHA256_Maj(a, b, c)) <br>h = g <br>g = f <br>f = e <br>e = SHA256_AddUnsigned(d, T1) <br>d = c <br>c = b <br>b = a <br>a = SHA256_AddUnsigned(T1, T2) <br>Next <br>HASH(0) = SHA256_AddUnsigned(a, HASH(0)) <br>HASH(1) = SHA256_AddUnsigned(b, HASH(1)) <br>HASH(2) = SHA256_AddUnsigned(c, HASH(2)) <br>HASH(3) = SHA256_AddUnsigned(d, HASH(3)) <br>HASH(4) = SHA256_AddUnsigned(e, HASH(4)) <br>HASH(5) = SHA256_AddUnsigned(f, HASH(5)) <br>HASH(6) = SHA256_AddUnsigned(g, HASH(6)) <br>HASH(7) = SHA256_AddUnsigned(h, HASH(7)) <br>Next <br>SHA256 = "" <br>If p_Len >= 8 Then p_Len = 8 <br>If p_Len <= 0 Then p_Len = 2 <br>For i = 0 To p_Len - 1 <br>SHA256 = SHA256 & Right("00000000" & Hex(HASH(i)), 8) <br>Next <br>SHA256 = LCase(SHA256) <br>End Function <br><br>Public Function EncryptMode(ByVal p_String, ByVal p_Type) <br>Dim E1s, E2s <br>E1s = 16 ' 第一次或者MD5算法加密的长度 16位MD5 加密长度 <br>E2s = 2 ' 第二次或者SHA256算法加密的长度 2*8=16位SHA256 加密长度,最大加密长度为8*8=64位 <br>If Not IsNumeric(p_Type) Then <br>p_Type = 1 <br>ElseIf p_Type > 7 or p_Type < 0 Then '判断方案数,根据p_Type最大值判断 <br>p_Type = 1 <br>End If <br>If Not IsNumeric(E1s) Then <br>E1s = 16 <br>ElseIf E1s <> 16 And E1s <> 32 Then <br>E1s = 16 <br>End If <br>If Not IsNumeric(E2s) Then <br>E2s = 2 <br>ElseIf E2s > 8 or E2s < 0 Then <br>E2s = 2 <br>End If <br>' ========================================== <br>' 初次布置使用的时候最好调整加密方案,现在最多8种方案 <br>' 加密后字符串长度为16位,使用中可自行调整 <br>' ========================================== <br>Select Case p_Type <br>Case 0 ' MD5 算法 <br>EncryptMode = MD5(p_String, E1s) <br>Case 1 ' SHA256 算法 <br>EncryptMode = SHA256(p_String, E2s) <br>Case 2 ' 先 MD5 后 SHA256 <br>EncryptMode = SHA256(MD5(p_String, E1s), E2s) <br>Case 3 ' 先 SHA256 后 MD5 <br>EncryptMode = MD5(SHA256(p_String, E2s), E1s) <br>Case 4 ' 两次MD5 <br>EncryptMode = MD5(MD5(p_String, E1s), E2s) <br>Case 5 ' 两次SHA256 <br>EncryptMode = SHA256(SHA256(p_String, E1s), E2s) <br>Case 6 ' 前8位 MD5 算法 后8位 SHA256 算法 <br>EncryptMode = Left(MD5(p_String, E1s), 8) & Right(SHA256(p_String, E2s), 8) <br>Case 7 ' 前8位 SHA256 算法 后8位 MD5 算法 <br>EncryptMode = Left(SHA256(p_String, E2s), 8) & Right(MD5(p_String, E1s), 8) <br>End Select <br>End Function <br>' ============================================ <br>' 全站密码类通用加密函数 <br>' ============================================ <br>Public Function PassWordEnt(ByVal p_String) <br>If p_String = "" or IsNull(p_String) Then p_String = 1 <br>' 取密码最后一个字符的AscW值与8的余数作为加密方案系数 <br>PassWordEnt = EncryptMode(p_String, AscW(LCase(Right(p_String, 1))) Mod 8) <br>End Function <br>End Class <br>%> <br> <br>演示: <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br><!--#include file="cls_Encrypt.asp"--> <br><% <br>Dim o <br>Set o = new Cls_Encrypt <br>Response.write "MD5算法:" & o.EncryptMode("admin",0) & "<br />" <br>Response.write "SHA256算法:" & o.EncryptMode("admin",1) & "<br />" <br>Response.write "先MD5后SHA256:" & o.EncryptMode("admin",2) & "<br />" <br>Response.write "先SHA256后MD5:" & o.EncryptMode("admin",3) & "<br />" <br>Response.write "两次MD5:" & o.EncryptMode("admin",4) & "<br />" <br>Response.write "两次SHA256:" & o.EncryptMode("admin",5) & "<br />" <br>Response.write "前8位MD5算法后8位SHA256算法:" & o.EncryptMode("admin",6) & "<br />" <br>Response.write "前8位SHA256算法后8位MD5算法:" & o.EncryptMode("admin",7) & "<br /><hr />" <br>Response.write "取密码最后一个字符的AscW值与8的余数作为加密方案系数:" & o.PassWordEnt("admin") & "<br /><hr />" <br>Response.write "16位MD5加密:" & o.md5("admin",16) & "<br />" <br>Response.write "32位MD5加密:" & o.md5("admin",32) & "<br /><hr />" <br>Response.write "8位SHA256加密:" & o.sha256("admin",1) & "<br />" <br>Response.write "16位SHA256加密:" & o.sha256("admin",2) & "<br />" <br>Response.write "24位SHA256加密:" & o.sha256("admin",3) & "<br />" <br>Response.write "32位SHA256加密:" & o.sha256("admin",4) & "<br />" <br>Response.write "40位SHA256加密:" & o.sha256("admin",5) & "<br />" <br>Response.write "48位SHA256加密:" & o.sha256("admin",6) & "<br />" <br>Response.write "56位SHA256加密:" & o.sha256("admin",7) & "<br />" <br>Response.write "64位SHA256加密:" & o.sha256("admin",8) & "<br />" <br>Set o = nothing <br>%> <br></li><li> </li><li> </li></ol></pre>