首页 > 代码库 > 小白C#窗体系列-08小议Base64+MD5加密

小白C#窗体系列-08小议Base64+MD5加密

啥是Base64呢?怎么说呢,这个加密比较常用,想想迅雷的下载地址,想想QQ旋风和快车。他们就是用的这个Base64来加密地址,现在网上很多地址解析器,原理就是反Base64。
        Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。看这个例子(例子)
        逆天只是个小白,小白嘛高深的就不会,就弄弄简单的咯~就直接用他默认的编码库了,就不自己自定义了,如果你想弄弄自定义的就看看上面的例子吧~
        我们进入正题,单独一个base64没什么意思,发个说说就O了,就算对MD5系列加密小工具的拓展吧(当时说的思路拓展),先说下base64怎么加密和解密吧:     加密:    Convert.ToBase64String(baseBuffer);  //给他一个byte[ ] 返回一个字符串       解密:       byte[] buffer = Convert.FromBase64String(txtString.Text); //给他一个字符串,返回一个byte[ ]
                         是不是无语了,就这么简单,其实逆天今天是听朋友提了一下,Java现在是Base64+MD5结合,我就想了,反正java的都有了,哥也弄个C#版本的(语法上还是有些区别的【目测:Java MD5不要一个一个的ToString("X2");】)。
    下面贴个代码:         
 
public void GetMD5Base()
{
    MD5 md5 = MD5.Create();
    
    string input = txtString.Text;
    
    byte[] buffer = Encoding.UTF8.GetBytes(input);  //字符串转成byte[ ]数组
    
    byte[] newBuffer = md5.ComputeHash(buffer, 0, buffer.Length);
    
    StringBuilder sb = new StringBuilder();
    
    for (int i = 0; i < newBuffer.Length; i++)
    {
 
        sb.Append(newBuffer[i].ToString("X2"));
    }
    
    byte[] baseBuffer = Encoding.UTF8.GetBytes(sb.ToString()); //把转码后的MD5 32位密文转成byte[ ] 
    
    txtNeed.Text = Convert.ToBase64String(baseBuffer);     //这个要注意,不要在newbuffer就转,你解密的时候会乱码(有时候)
}
  解码就简单了:(本程序加密后的密文,在解密时只能得到MD5)
 
public void GetMD5()
{
    try
    {
        byte[] buffer = Convert.FromBase64String(txtString.Text);
        
        txtNeed.Text = Encoding.UTF8.GetString(buffer);
    }
    catch { MessageBox.Show("请输入正确的Base64码"); }
}
 
 贴个源码和软件吧:http://pan.baidu.com/s/1dDjD01z
本期推荐:Reflector8.3   Telerik JustDecomp                                                                             下一期:SHA系列加密

小白C#窗体系列-08小议Base64+MD5加密