当前位置: 首页 > news >正文

ASP版MD5加密函数及用法

MD5.asp 文件内容

<%
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 )
Dim  Md5OLD
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  str2bin(varstr) 
    
Dim  varasc
    
Dim  i
    
Dim  varchar
    
Dim  varlow
    
Dim  varhigh
    
    str2bin
= ""  
    
For  i = 1   To   Len (varstr) 
        varchar
= mid (varstr,i, 1
        varasc 
=   Asc (varchar) 
        
        
If  varasc < 0   Then  
        varasc 
=  varasc  +   65535  
        
End   If  
        
        
If  varasc > 255   Then  
        varlow 
=   Left ( Hex ( Asc (varchar)), 2
        varhigh 
=   right ( Hex ( Asc (varchar)), 2
        str2bin 
=  str2bin  &  chrB( " &H "   &  varlow)  &  chrB( " &H "   &  varhigh) 
        
Else  
        str2bin 
=  str2bin  &  chrB(AscB(varchar)) 
        
End   If  
    
Next  
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
    
If  Md5OLD  =   1   Then
        lMessageLength 
=   Len (sMessage)
    
Else
        lMessageLength 
=  LenB(sMessage)
    
End   If
    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
        
If  Md5OLD  =   1   Then
            lWordArray(lWordCount) 
=  lWordArray(lWordCount)  or  LShift( Asc ( Mid (sMessage, lByteCount  +   1 1 )), lBytePosition)
        
Else
            lWordArray(lWordCount) 
=  lWordArray(lWordCount)  or  LShift(AscB(MidB(sMessage, lByteCount  +   1 1 )), lBytePosition)
        
End   If
        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
    
If  Md5OLD  =   1   Then
        x 
=  ConvertToWordArray(sMessage)
    
Else
        x 
=  ConvertToWordArray(str2bin(sMessage))
    
End   If
    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))   ' I crop this to fit 16byte database password :D
     end   if
End Function
%>

 test.asp 测试页的内容

<!-- #include file=md5.asp -->

<%
response.write MD5(
" http://blog.sina.com.cn/juyonghong " , 32 )   ' 生成32位编码
response.write  " <br><br> "
response.write MD5(
" http://blog.sina.com.cn/juyonghong " , 16 ' 生成16位编码
%>

注:

1、由于MD5加密目前来说是不可逆的,即可以通过原始数据生成md5码后,但不能通过md5码还原数据。

2、虽然不可逆,但同一个字符串只能生成同样的一组md5码。

具体使用方法:(以用户注册、登录为例)

1、注册时,将md5(request.form("password"),16)的值存入数据库;

2、登录验证时,将数据库中存的md5码与md5("密码",16)比较。








相关文章:

  • MySQL中进行树状所有子节点的查询
  • mysql中的 IN和FIND_IN_SET的查询问题
  • linux取消屏保
  • Linux下tar.xz结尾的文件的解压方法
  • 解决 /lib/libc.so.6: version `GLIBC_2.11′ not found
  • configure: error: C++ preprocessor /lib/cpp fails sanity check
  • Glibc-2.4.tar.gz的安装问题一个一个解决
  • 编译安装glibc
  • Ubuntu 更新glibc
  • VMware Linux 共享文件夹 虚拟机无共享文件解决方法
  • 编译出错:X11/extensions/XTest.h:没有那个文件或目录
  • apache-tomcat-7 设置最大上传.war文件大小
  • 关于异常“The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine”的处理
  • 让IIS 7显示ASP的详细错误信息-无论什么样的代码错误,只显示“500 - 内部服务器错误解决
  • jquery 判断一个对象是否存在
  • ECMAScript6(0):ES6简明参考手册
  • ES2017异步函数现已正式可用
  • Java Agent 学习笔记
  • js作用域和this的理解
  • maya建模与骨骼动画快速实现人工鱼
  • python docx文档转html页面
  • SpiderData 2019年2月23日 DApp数据排行榜
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 彻底搞懂浏览器Event-loop
  • 初识MongoDB分片
  • 后端_MYSQL
  • 简单数学运算程序(不定期更新)
  • 如何用vue打造一个移动端音乐播放器
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​2021半年盘点,不想你错过的重磅新书
  • ​用户画像从0到100的构建思路
  • # .NET Framework中使用命名管道进行进程间通信
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (007)XHTML文档之标题——h1~h6
  • (1)(1.11) SiK Radio v2(一)
  • (1)(1.13) SiK无线电高级配置(五)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二)WCF的Binding模型
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)计算机毕业设计高校学生选课系统
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原創) 物件導向與老子思想 (OO)
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET DataGridView数据绑定说明
  • .Net多线程总结
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [BJDCTF 2020]easy_md5
  • [C++]:for循环for(int num : nums)
  • [CF494C]Helping People
  • [English]英语积累本
  • [java] 23种设计模式之责任链模式
  • [java基础揉碎]关系运算符(比较运算符)逻辑运算符赋值运算符三元运算符运算符的优先级