温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

项目总结-MD5的使用

发布时间:2020-07-23 18:23:41 来源:网络 阅读:735 作者:孤鹜111 栏目:编程语言

MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法。任何长度的任意内容都可以用MD5计算出散列值。

 
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)进行对照。

 

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI