MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法。任何长度的任意内容都可以用MD5计算出散列值。
网站建设公司,为您提供网站建设,网站制作,网页设计及定制网站建设服务,专注于成都定制网页设计,高端网页制作,对成都三维植被网等多个行业拥有丰富的网站建设经验的网站建设公司。专业网站设计,网站优化推广哪家好,专业网站推广优化,H5建站,响应式网站。
MD5长度一般是32位的16进制数字符串。
理论上,MD5值的个数是有限的,但是源数据是无限的,因此存在着不同的内容产生相同MD5值的概率。因此MD5算法不可逆,也就是只能得到内容对应的MD5值,无法由MD5值反推内容。但是对不同的内容产生相同MD5值的概率非常非常非常低!
MD5算法理论上是不可逆的,因此***的唯一办法就是碰撞。
1)使用MD5进行对字符串的操作,具体代码实现:
using System.Security.Cryptography;//需要导入这个命名空间
......
static void Main(string[] args)
{
Console.WriteLine("请输入字符串,使用MD5加密 ...");
string str = Console.ReadLine();
string md5 = Md5ChuLiStr(str);
Console.WriteLine(md5);
Console.ReadKey();
}
private static string Md5ChuLiStr(string msg)
{
//1.创建一个MD5对象
MD5 md5 = MD5.Create();
//2.把字符串变为一个byte数组
//对于中文或者某些字符,采用不同的编码生成的byte[]是不一样的,
//所以造成了采用不同编码生成的md5值不一样的情况。
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(msg);
//3.将一个byte[]通过MD5计算得到一个新的byte[],新的byte[]就是计算md5后的结果。
byte[] md5Buffer = md5.ComputeHash(buffer);
//释放资源
md5.Clear();
//4.将计算后的结果直接显示为字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < md5Buffer.Length; i++)
{
//x2:把每个数字转换为16进制,并保留两位数字。
sb.Append(md5Buffer[i].ToString("x2"));
}
return sb.ToString();
}
......
2)使用MD5进行对文件的操作,具体代码实现:
using System.Security.Cryptography;//需要导入这个命名空间
using System.IO;//需要用到文件流等
...
static void Main(string[] args)
{
Console.WriteLine("请输入文件路径,使用MD5加密 ...");
string path = Console.ReadLine();
string md5 = Md5ChuLiFile(path);
Console.WriteLine(md5);
Console.ReadKey();
}
private static string Md5ChuLiFile (string path)
{
MD5 md5 = MD5.Create();
using (FileStream fs = File.OpenRead(path))
{
byte[] md5Buffer = md5.ComputeHash(fs);//这里直接传入文件流对象
md5.Clear();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < md5Buffer.Length; i++)
{
sb.Append(md5Buffer[i].ToString("x2"));
}
return sb.ToString();
}
}
......
*:最后,产生的MD5值可以通过MD5计算器(CalcMD5.exe)进行对照。
网站栏目:项目总结-MD5的使用
链接分享:
http://dzwzjz.com/article/gsdgee.html