md5加密函数(md5加密公式)

2023-02-28 13:10:50 密语知识 思思

怎样对要POST的数据进行md5加密

这个是没有必要的,因为MD5加密是不可逆的,所以服务器也不知道原来的数据是什么,如果被截获同样是明文,所以最好用SSL

如果要加密可以看下面的代码:

使用下面的函数,例如varpwd=hex_md5("hello world");对"hello world"进行md5加密。

var hexcase = 0;

function hex_md5(a) {

if (a == "") return a;

return rstr2hex(rstr_md5(str2rstr_utf8(a)))

}

function hex_hmac_md5(a, b) {

return rstr2hex(rstr_hmac_md5(str2rstr_utf8(a), str2rstr_utf8(b)))

}

function md5_vm_test() {

return hex_md5("abc").toLowerCase() == "900150983cd24fb0d6963f7d28e17f72"

}

function rstr_md5(a) {

return binl2rstr(binl_md5(rstr2binl(a), a.length * 8))

}

function rstr_hmac_md5(c, f) {

var e = rstr2binl(c);

if (e.length 16) {

e = binl_md5(e, c.length * 8)

}

var a = Array(16),

d = Array(16);

for (var b = 0; b 16; b++) {

a[b] = e[b] ^ 909522486;

d[b] = e[b] ^ 1549556828

}

var g = binl_md5(a.concat(rstr2binl(f)), 512 + f.length * 8);

return binl2rstr(binl_md5(d.concat(g), 512 + 128))

}

function rstr2hex(c) {

try {

hexcase

} catch(g) {

hexcase = 0

}

var f = hexcase ? "0123456789ABCDEF": "0123456789abcdef";

var b = "";

var a;

for (var d = 0; d c.length; d++) {

a = c.charCodeAt(d);

b += f.charAt((a 4) 15) + f.charAt(a 15)

}

return b

}

function str2rstr_utf8(c) {

var b = "";

var d = -1;

var a, e;

while (++d c.length) {

a = c.charCodeAt(d);

e = d + 1 c.length ? c.charCodeAt(d + 1) : 0;

if (55296 = a a = 56319 56320 = e e = 57343) {

a = 65536 + ((a 1023) 10) + (e 1023);

d++

}

if (a = 127) {

b += String.fromCharCode(a)

} else {

if (a = 2047) {

b += String.fromCharCode(192 | ((a 6) 31), 128 | (a 63))

} else {

if (a = 65535) {

b += String.fromCharCode(224 | ((a 12) 15), 128 | ((a 6) 63), 128 | (a 63))

} else {

if (a = 2097151) {

b += String.fromCharCode(240 | ((a 18) 7), 128 | ((a 12) 63), 128 | ((a 6) 63), 128 | (a 63))

}

}

}

}

}

return b

}

function rstr2binl(b) {

var a = Array(b.length 2);

for (var c = 0; c a.length; c++) {

a[c] = 0

}

for (var c = 0; c b.length * 8; c += 8) {

a[c 5] |= (b.charCodeAt(c / 8) 255) (c % 32)

}

return a

}

function binl2rstr(b) {

var a = "";

for (var c = 0; c b.length * 32; c += 8) {

a += String.fromCharCode((b[c 5] (c % 32)) 255)

}

return a

}

function binl_md5(p, k) {

p[k 5] |= 128 ((k) % 32);

p[(((k + 64) 9) 4) + 14] = k;

var o = 1732584193;

var n = -271733879;

var m = -1732584194;

var l = 271733878;

for (var g = 0; g p.length; g += 16) {

var j = o;

var h = n;

var f = m;

var e = l;

o = md5_ff(o, n, m, l, p[g + 0], 7, -680876936);

l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586);

m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819);

n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330);

o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897);

l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426);

m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341);

n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983);

o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416);

l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417);

m = md5_ff(m, l, o, n, p[g + 10], 17, -42063);

n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162);

o = md5_ff(o, n, m, l, p[g + 12], 7, 1804603682);

l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101);

m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290);

n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329);

o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510);

l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632);

m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713);

n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302);

o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691);

l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083);

m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335);

n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848);

o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438);

l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690);

m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961);

n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501);

o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467);

l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784);

m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473);

n = md5_gg(n, m, l, o, p[g + 12], 20, -1926607734);

o = md5_hh(o, n, m, l, p[g + 5], 4, -378558);

l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463);

m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562);

n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556);

o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060);

l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353);

m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632);

n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640);

o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174);

l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222);

m = md5_hh(m, l, o, n, p[g + 3], 16, -722521979);

n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189);

o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487);

l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835);

m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520);

n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651);

o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844);

l = md5_ii(l, o, n, m, p[g + 7], 10, 1126891415);

m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905);

n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055);

o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571);

l = md5_ii(l, o, n, m, p[g + 3], 10, -1894986606);

m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523);

n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799);

o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359);

l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744);

m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380);

n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649);

o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070);

l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379);

m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259);

n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551);

o = safe_add(o, j);

n = safe_add(n, h);

m = safe_add(m, f);

l = safe_add(l, e)

}

return Array(o, n, m, l)

}

function md5_cmn(h, e, d, c, g, f) {

return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d)

}

function md5_ff(g, f, k, j, e, i, h) {

return md5_cmn((f k) | ((~f) j), g, f, e, i, h)

}

function md5_gg(g, f, k, j, e, i, h) {

return md5_cmn((f j) | (k (~j)), g, f, e, i, h)

}

function md5_hh(g, f, k, j, e, i, h) {

return md5_cmn(f ^ k ^ j, g, f, e, i, h)

}

function md5_ii(g, f, k, j, e, i, h) {

return md5_cmn(k ^ (f | (~j)), g, f, e, i, h)

}

function safe_add(a, d) {

var c = (a 65535) + (d 65535);

var b = (a 16) + (d 16) + (c 16);

return (b 16) | (c 65535)

}

function bit_rol(a, b) {

return (a b) | (a (32 - b))

};

用VB实现MD5加密

md5加密运算是不可逆的,就是说不能通过那一串古古怪怪的东西算出它原始的样子。

以下提供VB可用的16位和32位MD5加密函数代码:

Private Const BITS_TO_A_BYTE = 8

Private Const BYTES_TO_A_WORD = 4

Private Const BITS_TO_A_WORD = 32

 

Private m_lOnBits(30)

Private m_l2Power(30)

 

Private 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

 

Private 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

 

Private Function RotateLeft(lValue, iShiftBits)

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

End Function

 

Private 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

 

Private Function md5_F(x, y, z)

md5_F = (x And y) Or ((Not x) And z)

End Function

 

Private Function md5_G(x, y, z)

md5_G = (x And z) Or (y And (Not z))

End Function

 

Private Function md5_H(x, y, z)

md5_H = (x Xor y Xor z)

End Function

 

Private Function md5_I(x, y, z)

md5_I = (y Xor (x Or (Not z)))

End Function

 

Private 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

 

Private 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

 

Private 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

 

Private 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

 

Private 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

 

Private 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

 

Public Function MD5(sMessage, stype)

m_lOnBits(0) = CLng(1)

m_lOnBits(1) = CLng(3)

m_lOnBits(2) = CLng(7)

m_lOnBits(3) = CLng(15)

m_lOnBits(4) = CLng(31)

m_lOnBits(5) = CLng(63)

m_lOnBits(6) = CLng(127)

m_lOnBits(7) = CLng(255)

m_lOnBits(8) = CLng(511)

m_lOnBits(9) = CLng(1023)

m_lOnBits(10) = CLng(2047)

m_lOnBits(11) = CLng(4095)

m_lOnBits(12) = CLng(8191)

m_lOnBits(13) = CLng(16383)

m_lOnBits(14) = CLng(32767)

m_lOnBits(15) = CLng(65535)

m_lOnBits(16) = CLng(131071)

m_lOnBits(17) = CLng(262143)

m_lOnBits(18) = CLng(524287)

m_lOnBits(19) = CLng(1048575)

m_lOnBits(20) = CLng(2097151)

m_lOnBits(21) = CLng(4194303)

m_lOnBits(22) = CLng(8388607)

m_lOnBits(23) = CLng(16777215)

m_lOnBits(24) = CLng(33554431)

m_lOnBits(25) = CLng(67108863)

m_lOnBits(26) = CLng(134217727)

m_lOnBits(27) = CLng(268435455)

m_lOnBits(28) = CLng(536870911)

m_lOnBits(29) = CLng(1073741823)

m_lOnBits(30) = CLng(2147483647)

 

m_l2Power(0) = CLng(1)

m_l2Power(1) = CLng(2)

m_l2Power(2) = CLng(4)

m_l2Power(3) = CLng(8)

m_l2Power(4) = CLng(16)

m_l2Power(5) = CLng(32)

m_l2Power(6) = CLng(64)

m_l2Power(7) = CLng(128)

m_l2Power(8) = CLng(256)

m_l2Power(9) = CLng(512)

m_l2Power(10) = CLng(1024)

m_l2Power(11) = CLng(2048)

m_l2Power(12) = CLng(4096)

m_l2Power(13) = CLng(8192)

m_l2Power(14) = CLng(16384)

m_l2Power(15) = CLng(32768)

m_l2Power(16) = CLng(65536)

m_l2Power(17) = CLng(131072)

m_l2Power(18) = CLng(262144)

m_l2Power(19) = CLng(524288)

m_l2Power(20) = CLng(1048576)

m_l2Power(21) = CLng(2097152)

m_l2Power(22) = CLng(4194304)

m_l2Power(23) = CLng(8388608)

m_l2Power(24) = CLng(16777216)

m_l2Power(25) = CLng(33554432)

m_l2Power(26) = CLng(67108864)

m_l2Power(27) = CLng(134217728)

m_l2Power(28) = CLng(268435456)

m_l2Power(29) = CLng(536870912)

m_l2Power(30) = CLng(1073741824)

 

 

Dim x

Dim k

Dim AA

Dim BB

Dim CC

Dim DD

Dim a

Dim b

Dim c

Dim d

 

Const S11 = 7

Const S12 = 12

Const S13 = 17

Const S14 = 22

Const S21 = 5

Const S22 = 9

Const S23 = 14

Const S24 = 20

Const S31 = 4

Const S32 = 11

Const S33 = 16

Const S34 = 23

Const S41 = 6

Const S42 = 10

Const S43 = 15

Const S44 = 21

 

x = ConvertToWordArray(sMessage)

 

a = H67452301

b = HEFCDAB89

c = H98BADCFE

d = H10325476

 

For k = 0 To UBound(x) Step 16

AA = a

BB = b

CC = c

DD = d

 

md5_FF a, b, c, d, x(k + 0), S11, HD76AA478

md5_FF d, a, b, c, x(k + 1), S12, HE8C7B756

md5_FF c, d, a, b, x(k + 2), S13, H242070DB

md5_FF b, c, d, a, x(k + 3), S14, HC1BDCEEE

md5_FF a, b, c, d, x(k + 4), S11, HF57C0FAF

md5_FF d, a, b, c, x(k + 5), S12, H4787C62A

md5_FF c, d, a, b, x(k + 6), S13, HA8304613

md5_FF b, c, d, a, x(k + 7), S14, HFD469501

md5_FF a, b, c, d, x(k + 8), S11, H698098D8

md5_FF d, a, b, c, x(k + 9), S12, H8B44F7AF

md5_FF c, d, a, b, x(k + 10), S13, HFFFF5BB1

md5_FF b, c, d, a, x(k + 11), S14, H895CD7BE

md5_FF a, b, c, d, x(k + 12), S11, H6B901122

md5_FF d, a, b, c, x(k + 13), S12, HFD987193

md5_FF c, d, a, b, x(k + 14), S13, HA679438E

md5_FF b, c, d, a, x(k + 15), S14, H49B40821

 

md5_GG a, b, c, d, x(k + 1), S21, HF61E2562

md5_GG d, a, b, c, x(k + 6), S22, HC040B340

md5_GG c, d, a, b, x(k + 11), S23, H265E5A51

md5_GG b, c, d, a, x(k + 0), S24, HE9B6C7AA

md5_GG a, b, c, d, x(k + 5), S21, HD62F105D

md5_GG d, a, b, c, x(k + 10), S22, H2441453

md5_GG c, d, a, b, x(k + 15), S23, HD8A1E681

md5_GG b, c, d, a, x(k + 4), S24, HE7D3FBC8

md5_GG a, b, c, d, x(k + 9), S21, H21E1CDE6

md5_GG d, a, b, c, x(k + 14), S22, HC33707D6

md5_GG c, d, a, b, x(k + 3), S23, HF4D50D87

md5_GG b, c, d, a, x(k + 8), S24, H455A14ED

md5_GG a, b, c, d, x(k + 13), S21, HA9E3E905

md5_GG d, a, b, c, x(k + 2), S22, HFCEFA3F8

md5_GG c, d, a, b, x(k + 7), S23, H676F02D9

md5_GG b, c, d, a, x(k + 12), S24, H8D2A4C8A

 

md5_HH a, b, c, d, x(k + 5), S31, HFFFA3942

md5_HH d, a, b, c, x(k + 8), S32, H8771F681

md5_HH c, d, a, b, x(k + 11), S33, H6D9D6122

md5_HH b, c, d, a, x(k + 14), S34, HFDE5380C

md5_HH a, b, c, d, x(k + 1), S31, HA4BEEA44

md5_HH d, a, b, c, x(k + 4), S32, H4BDECFA9

md5_HH c, d, a, b, x(k + 7), S33, HF6BB4B60

md5_HH b, c, d, a, x(k + 10), S34, HBEBFBC70

md5_HH a, b, c, d, x(k + 13), S31, H289B7EC6

md5_HH d, a, b, c, x(k + 0), S32, HEAA127FA

md5_HH c, d, a, b, x(k + 3), S33, HD4EF3085

md5_HH b, c, d, a, x(k + 6), S34, H4881D05

md5_HH a, b, c, d, x(k + 9), S31, HD9D4D039

md5_HH d, a, b, c, x(k + 12), S32, HE6DB99E5

md5_HH c, d, a, b, x(k + 15), S33, H1FA27CF8

md5_HH b, c, d, a, x(k + 2), S34, HC4AC5665

 

md5_II a, b, c, d, x(k + 0), S41, HF4292244

md5_II d, a, b, c, x(k + 7), S42, H432AFF97

md5_II c, d, a, b, x(k + 14), S43, HAB9423A7

md5_II b, c, d, a, x(k + 5), S44, HFC93A039

md5_II a, b, c, d, x(k + 12), S41, H655B59C3

md5_II d, a, b, c, x(k + 3), S42, H8F0CCC92

md5_II c, d, a, b, x(k + 10), S43, HFFEFF47D

md5_II b, c, d, a, x(k + 1), S44, H85845DD1

md5_II a, b, c, d, x(k + 8), S41, H6FA87E4F

md5_II d, a, b, c, x(k + 15), S42, HFE2CE6E0

md5_II c, d, a, b, x(k + 6), S43, HA3014314

md5_II b, c, d, a, x(k + 13), S44, H4E0811A1

md5_II a, b, c, d, x(k + 4), S41, HF7537E82

md5_II d, a, b, c, x(k + 11), S42, HBD3AF235

md5_II c, d, a, b, x(k + 2), S43, H2AD7D2BB

md5_II b, c, d, a, x(k + 9), S44, HEB86D391

 

a = AddUnsigned(a, AA)

b = AddUnsigned(b, BB)

c = AddUnsigned(c, CC)

d = AddUnsigned(d, DD)

Next

 

If stype = 32 Then

MD5 = LCase(WordToHex(a)  WordToHex(b)  WordToHex(c)  WordToHex(d))

Else

MD5 = LCase(WordToHex(b)  WordToHex(c))

End If

End Function

'下面是测试代码

Sub test()

MsgBox MD5("a", 16) '16位加密

MsgBox MD5("a", 32) '32位加密

End Sub

Linux下调用MD5加密的函数是什么?

先要安装libssl-dev

#includestdio.h

#includeopenssl/md5.h

#includestring.h

int main( int argc, char **argv )

{

unsigned char *data = "123";

unsigned char md[16];

int i;

char tmp[3]={'\0'},buf[33]={'\0'};

MD5(data,strlen(data),md);

for (i = 0; i 16; i++){

sprintf(tmp,"%2.2x",md[i]);

strcat(buf,tmp);

}

printf("%s\n",buf);

return 0;

}

编译:

# gcc -o 1 1.c -lcrypto

md5加密函数(md5加密公式) 第1张

MD5是怎么加密的?

1、要有md5加密函数

2、使用这个函数

比如b/s程序 md5一般都是一个文件

需要用到md5的函数的时候 include这个文件

还是 md5(password,16) 就是调用这个函数 password是 变量名16 加密长度

如何用VBA 编写MD5加密函数?

'电子表格中调用方法1如 =MD5(A1,16)

'电子表格中调用方法2如 =MD5(A1,32)

'打开Excel按Alt+F11,然后点插入菜单中的模块,然后把这上面所有代码粘贴到模块1中,保存关闭即可在单元格中调用

'这些是注释,以把以下代码直接复制到使用即可。

Private Const BITS_TO_A_BYTE = 8

Private Const BYTES_TO_A_WORD = 4

Private Const BITS_TO_A_WORD = 32

Private m_lOnBits(30)

Private m_l2Power(30)

Private 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

Private 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

Private Function RotateLeft(lValue, iShiftBits)

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

End Function

Private 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

Private Function md5_F(x, y, z)

md5_F = (x And y) Or ((Not x) And z)

End Function

Private Function md5_G(x, y, z)

md5_G = (x And z) Or (y And (Not z))

End Function

Private Function md5_H(x, y, z)

md5_H = (x Xor y Xor z)

End Function

Private Function md5_I(x, y, z)

md5_I = (y Xor (x Or (Not z)))

End Function

Private 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

Private 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

Private 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

Private 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

Private 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

Private 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

Public Function MD5(sMessage, stype)

m_lOnBits(0) = CLng(1)

m_lOnBits(1) = CLng(3)

m_lOnBits(2) = CLng(7)

m_lOnBits(3) = CLng(15)

m_lOnBits(4) = CLng(31)

m_lOnBits(5) = CLng(63)

m_lOnBits(6) = CLng(127)

m_lOnBits(7) = CLng(255)

m_lOnBits(8) = CLng(511)

m_lOnBits(9) = CLng(1023)

m_lOnBits(10) = CLng(2047)

m_lOnBits(11) = CLng(4095)

m_lOnBits(12) = CLng(8191)

m_lOnBits(13) = CLng(16383)

m_lOnBits(14) = CLng(32767)

m_lOnBits(15) = CLng(65535)

m_lOnBits(16) = CLng(131071)

m_lOnBits(17) = CLng(262143)

m_lOnBits(18) = CLng(524287)

m_lOnBits(19) = CLng(1048575)

m_lOnBits(20) = CLng(2097151)

m_lOnBits(21) = CLng(4194303)

m_lOnBits(22) = CLng(8388607)

m_lOnBits(23) = CLng(16777215)

m_lOnBits(24) = CLng(33554431)

m_lOnBits(25) = CLng(67108863)

m_lOnBits(26) = CLng(134217727)

m_lOnBits(27) = CLng(268435455)

m_lOnBits(28) = CLng(536870911)

m_lOnBits(29) = CLng(1073741823)

m_lOnBits(30) = CLng(2147483647)

m_l2Power(0) = CLng(1)

m_l2Power(1) = CLng(2)

m_l2Power(2) = CLng(4)

m_l2Power(3) = CLng(8)

m_l2Power(4) = CLng(16)

m_l2Power(5) = CLng(32)

m_l2Power(6) = CLng(64)

m_l2Power(7) = CLng(128)

m_l2Power(8) = CLng(256)

m_l2Power(9) = CLng(512)

m_l2Power(10) = CLng(1024)

m_l2Power(11) = CLng(2048)

m_l2Power(12) = CLng(4096)

m_l2Power(13) = CLng(8192)

m_l2Power(14) = CLng(16384)

m_l2Power(15) = CLng(32768)

m_l2Power(16) = CLng(65536)

m_l2Power(17) = CLng(131072)

m_l2Power(18) = CLng(262144)

m_l2Power(19) = CLng(524288)

m_l2Power(20) = CLng(1048576)

m_l2Power(21) = CLng(2097152)

m_l2Power(22) = CLng(4194304)

m_l2Power(23) = CLng(8388608)

m_l2Power(24) = CLng(16777216)

m_l2Power(25) = CLng(33554432)

m_l2Power(26) = CLng(67108864)

m_l2Power(27) = CLng(134217728)

m_l2Power(28) = CLng(268435456)

m_l2Power(29) = CLng(536870912)

m_l2Power(30) = CLng(1073741824)

Dim x

Dim k

Dim AA

Dim BB

Dim CC

Dim DD

Dim a

Dim b

Dim c

Dim d

Const S11 = 7

Const S12 = 12

Const S13 = 17

Const S14 = 22

Const S21 = 5

Const S22 = 9

Const S23 = 14

Const S24 = 20

Const S31 = 4

Const S32 = 11

Const S33 = 16

Const S34 = 23

Const S41 = 6

Const S42 = 10

Const S43 = 15

Const S44 = 21

x = ConvertToWordArray(sMessage)

a = H67452301

b = HEFCDAB89

c = H98BADCFE

d = H10325476

For k = 0 To UBound(x) Step 16

AA = a

BB = b

CC = c

DD = d

md5_FF a, b, c, d, x(k + 0), S11, HD76AA478

md5_FF d, a, b, c, x(k + 1), S12, HE8C7B756

md5_FF c, d, a, b, x(k + 2), S13, H242070DB

md5_FF b, c, d, a, x(k + 3), S14, HC1BDCEEE

md5_FF a, b, c, d, x(k + 4), S11, HF57C0FAF

md5_FF d, a, b, c, x(k + 5), S12, H4787C62A

md5_FF c, d, a, b, x(k + 6), S13, HA8304613

md5_FF b, c, d, a, x(k + 7), S14, HFD469501

md5_FF a, b, c, d, x(k + 8), S11, H698098D8

md5_FF d, a, b, c, x(k + 9), S12, H8B44F7AF

md5_FF c, d, a, b, x(k + 10), S13, HFFFF5BB1

md5_FF b, c, d, a, x(k + 11), S14, H895CD7BE

md5_FF a, b, c, d, x(k + 12), S11, H6B901122

md5_FF d, a, b, c, x(k + 13), S12, HFD987193

md5_FF c, d, a, b, x(k + 14), S13, HA679438E

md5_FF b, c, d, a, x(k + 15), S14, H49B40821

md5_GG a, b, c, d, x(k + 1), S21, HF61E2562

md5_GG d, a, b, c, x(k + 6), S22, HC040B340

md5_GG c, d, a, b, x(k + 11), S23, H265E5A51

md5_GG b, c, d, a, x(k + 0), S24, HE9B6C7AA

md5_GG a, b, c, d, x(k + 5), S21, HD62F105D

md5_GG d, a, b, c, x(k + 10), S22, H2441453

md5_GG c, d, a, b, x(k + 15), S23, HD8A1E681

md5_GG b, c, d, a, x(k + 4), S24, HE7D3FBC8

md5_GG a, b, c, d, x(k + 9), S21, H21E1CDE6

md5_GG d, a, b, c, x(k + 14), S22, HC33707D6

md5_GG c, d, a, b, x(k + 3), S23, HF4D50D87

md5_GG b, c, d, a, x(k + 8), S24, H455A14ED

md5_GG a, b, c, d, x(k + 13), S21, HA9E3E905

md5_GG d, a, b, c, x(k + 2), S22, HFCEFA3F8

md5_GG c, d, a, b, x(k + 7), S23, H676F02D9

md5_GG b, c, d, a, x(k + 12), S24, H8D2A4C8A

md5_HH a, b, c, d, x(k + 5), S31, HFFFA3942

md5_HH d, a, b, c, x(k + 8), S32, H8771F681

md5_HH c, d, a, b, x(k + 11), S33, H6D9D6122

md5_HH b, c, d, a, x(k + 14), S34, HFDE5380C

md5_HH a, b, c, d, x(k + 1), S31, HA4BEEA44

md5_HH d, a, b, c, x(k + 4), S32, H4BDECFA9

md5_HH c, d, a, b, x(k + 7), S33, HF6BB4B60

md5_HH b, c, d, a, x(k + 10), S34, HBEBFBC70

md5_HH a, b, c, d, x(k + 13), S31, H289B7EC6

md5_HH d, a, b, c, x(k + 0), S32, HEAA127FA

md5_HH c, d, a, b, x(k + 3), S33, HD4EF3085

md5_HH b, c, d, a, x(k + 6), S34, H4881D05

md5_HH a, b, c, d, x(k + 9), S31, HD9D4D039

md5_HH d, a, b, c, x(k + 12), S32, HE6DB99E5

md5_HH c, d, a, b, x(k + 15), S33, H1FA27CF8

md5_HH b, c, d, a, x(k + 2), S34, HC4AC5665

md5_II a, b, c, d, x(k + 0), S41, HF4292244

md5_II d, a, b, c, x(k + 7), S42, H432AFF97

md5_II c, d, a, b, x(k + 14), S43, HAB9423A7

md5_II b, c, d, a, x(k + 5), S44, HFC93A039

md5_II a, b, c, d, x(k + 12), S41, H655B59C3

md5_II d, a, b, c, x(k + 3), S42, H8F0CCC92

md5_II c, d, a, b, x(k + 10), S43, HFFEFF47D

md5_II b, c, d, a, x(k + 1), S44, H85845DD1

md5_II a, b, c, d, x(k + 8), S41, H6FA87E4F

md5_II d, a, b, c, x(k + 15), S42, HFE2CE6E0

md5_II c, d, a, b, x(k + 6), S43, HA3014314

md5_II b, c, d, a, x(k + 13), S44, H4E0811A1

md5_II a, b, c, d, x(k + 4), S41, HF7537E82

md5_II d, a, b, c, x(k + 11), S42, HBD3AF235

md5_II c, d, a, b, x(k + 2), S43, H2AD7D2BB

md5_II b, c, d, a, x(k + 9), S44, HEB86D391

a = AddUnsigned(a, AA)

b = AddUnsigned(b, BB)

c = AddUnsigned(c, CC)

d = AddUnsigned(d, DD)

Next

If stype = 32 Then

MD5 = LCase(WordToHex(a) WordToHex(b) WordToHex(c) WordToHex(d))

Else

MD5 = LCase(WordToHex(b) WordToHex(c))

End If

End Function

'以下为测试用,可以不要

Sub test()

Dim i As String

i = InputBox("Please input a password:")

If MD5(i, 32) = MD5("abc", 32) Or MD5(i, 16) = MD5("abc", 16) Then: MsgBox "Ok": Else: MsgBox "failed": End

'MsgBox MD5("abc", 16) '返回16位小写

'MsgBox MD5("abc", 32) '返回32位小写

End Sub

'电子表格中调用方法1如 =MD5(A1,16)

'电子表格中调用方法2如 =MD5(A1,32)

'打开Excel按Alt+F11,然后点插入菜单中的模块,然后把这上面所有代码粘贴到模块1中,保存关闭即可在单元格中调用

Oracle定义DES加密解密及MD5加密函数示例

(1)DES加密函数

create

or

replace

function

encrypt_des(p_text

varchar2,

p_key

varchar2)

return

varchar2

is

v_text

varchar2(4000);

v_enc

varchar2(4000);

raw_input

RAW(128)

;

key_input

RAW(128)

;

decrypted_raw

RAW(2048);

begin

v_text

:=

rpad(

p_text,

(trunc(length(p_text)/8)+1)*8,

chr(0));

raw_input

:=

UTL_RAW.CAST_TO_RAW(v_text);

key_input

:=

UTL_RAW.CAST_TO_RAW(p_key);

dbms_obfuscation_toolkit.DESEncrypt(input

=

raw_input,key

=

key_input,encrypted_data

=decrypted_raw);

v_enc

:=

rawtohex(decrypted_raw);

dbms_output.put_line(v_enc);

return

v_enc;

end;

(2)DES解密函数

create

or

replace

function

decrypt_des(p_text

varchar2,p_key

varchar2)

return

varchar2

is

v_text

varchar2(2000);

begin

dbms_obfuscation_toolkit.DESDECRYPT(input_string

=

UTL_RAW.CAST_TO_varchar2(p_text),key_string

=p_key,

decrypted_string=

v_text);

v_text

:=

rtrim(v_text,chr(0));

dbms_output.put_line(v_text);

return

v_text;

end;

(3)MD5加密函数

CREATE

OR

REPLACE

FUNCTION

MD5(passwd

IN

VARCHAR2)

RETURN

VARCHAR2

IS

retval

varchar2(32);

BEGIN

retval

:=

utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING

=

passwd))

;

RETURN

retval;

END;

(4)函数使用示例

DES加密:

update

tb_salarysign_staff

s

set

s.staffpwd

=encrypt_des(s.staffpwd,

'test#5124*!de');

DES解密:select

decrypt_des(s.staffpwd,

'test#5124*!de')

from

tb_salarysign_staff

s

MD5加密:

update

tb_salarysign_staff

s

set

s.staffpwd

=

md5(s.staffpwd);