关于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( 0 2   *  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密码数据库,程序弄好勒,结果一运行机器死了,内存暴涨,最后还是算勒,呵呵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值