关于MD5码的一些自我总结

        MD5码现在使用的很广泛,其中不仅在web还是winform上。MD5码是不可逆的,虽然国内某大学女教师连破2种,但是她使用的碰撞算法,她也无法确定第二次就一定破的出来,所以就目前而言是安全的,不过时间长了就会有这种查询数据库出来也就不太安全了,目前有一些网站就可以查一些普通的密码,例如http://md5.rednoize.com/  查不到的就可以添加进去,这样时间长了就可以查出来。
下面是一个md5算法
MD5算法

         这个是C#中的,web中的FormsAuthentication.HashPasswordForStoringInConfigFile(字符串,"MD5")也可以实现,还有利用C#中函数实现的
函数实现

但是我在做支付宝在线支付的时候使用中文老提示错误,就是算法对中文不太支持,于是我转换为utf-8后再编码问题依然在,但使用vbscript的这个算法问题就解决了。
vb中的算法


后来我对比了一下Gb2312和GBK的字符表,就发现还是编码查找方式不同而引发的问题,现在正在研究C#中支持GBK编码的方法。
下面这个是VB.Net中的使用函数的实现办法
Dim md5 As New MD5CryptoServiceProvider
            
Dim username As Byte() = (New ASCIIEncoding).GetBytes(TextBox1.Text)
            
Dim mdString As String, mdString1 As String, mdString2 As String
            
Dim i As Integer
            
'转换为哈希值Byte数组
            Dim mdByte As Byte() = md5.ComputeHash(username)
            mdString 
= System.BitConverter.ToString(mdByte)
            
For i = 1 To 15
                mdString 
= mdString.Substring(02 * i) & mdString.Substring(3 + 2 * (i - 1), 47 - i * 3)
            
Next
            
'mdString = System.BitConverter.ToString(mdByte)
            'mdString = (New ASCIIEncoding).GetString(mdByte)
            TextBox2.Text = mdString


        现在动网论坛也使用的比较多,它使用的16位的MD5加密方式,从上面的加密算法我们可以看到它是由4组8位的密码组成,而16位就是取其中的2组合并的,不同的设置就取不同位置的密码来组合,下面是在外部插入动网数据库生成随机密码的代码。
public string createpass()
    {
        
int Ran,LengthNum=16;
        
string Createpass="";
        
for(int i=1;i<LengthNum;i++)
        {
            Random ram
=new Random();
            Ran 
= Convert.ToInt32(ram.NextDouble() * 2);
            
if(Ran== 0)
            {
                Ran 
=Convert.ToInt32(ram.NextDouble() * 25+ 97;
                Createpass 
=Createpass+Convert.ToString(Convert.ToChar(Ran)).ToUpper();
            }
            
else if(Ran == 1)
            {
                Ran 
= Convert.ToInt32(ram.NextDouble() * 9);
                Createpass 
= Createpass + Ran;
            }
            
else if(Ran == 2)
            {
                Ran 
= Convert.ToInt32(ram.NextDouble() * 25+ 97;
                Createpass 
=Createpass+Convert.ToString(Convert.ToChar(Ran));
            }
        }
        
return Createpass;
    }



这里是一个朋友的加密成字符密码的算法
加密为字符


其实密码就是几种情况,位移,叠加,无非就是多几次,以及加减乘除的内容。最近在弄md5密码数据库,程序弄好勒,结果一运行机器死了,内存暴涨,最后还是算勒,呵呵。
posted on 2006-04-20 14:53  kkk  阅读(1373)  评论(0编辑  收藏  举报