MD5介绍
MD5算法是一种散列算法,不是加密算法。
可以对字符串或文件进行md5计算,其实就是对byte(字节)进行md5计算,所以只要有字节就能计算md5散列值。
md5计算后的值,是一个散列值,是通过一种散列算法计算出来的,不是随机生成的。
同样一个值,只要采用相同的散列算法,那么每次计算出的散列值都是相等的。
只要内容出现了任何一个字节的变化,那么最终计算出的散列值就会完全不同。
md5散列算法每次计算出的值的长度是固定的(16个byte,转换为字符串后一般为32个字符)。
两个不同的值,计算出的md5散列值几乎是不同的。
md5无法根据已经计算出的散列值,反推算出原来的内容。
md5解密方式:穷举法
MD5的应用
数据库中的密码用明文存储很不安全,可以在存储密码的时候,将密码计算成md5值,数据库中存储的不是密码,而是一连串与密码对应的md5值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;//添加命名空间
using System.Text;
namespace test
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("请输入一个字符串");
string msg = Console.ReadLine();
string md5_value = GetMD5String(msg);
Console.WriteLine(md5_value);
}
}
//计算字符串的md5值
private static string GetMD5String(string msg)
{
StringBuilder sb = new StringBuilder();
//创建一个md5对象
using (MD5 md5= MD5.Create())
{
//把字符串转换成byte[]
byte[] buffers = Encoding.UTF8.GetBytes(msg);
//进行md5计算,计算完毕后,返回的也是一个byte[]
byte[] bytes = md5.ComputeHash(buffers);
//释放资源
md5.Clear();
//把bytes转换成一个16进制的字符串
for (int i = 0; i < bytes.Length; i++)
{
sb.Append(bytes[i].ToString("x2"));
}
}
return sb.ToString();
}
}
}
显示如下:
请输入一个字符串
123
对应的md5值为:202cb962ac59075b964b07152d234b70