MD5算法

定义MD5信息摘要算法,(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,或称哈希散列算法
你好
特征
1、雪崩算法
2、MD5是不可逆的(MD5破解是撞库破解)
对称加密
RSA 非对称加密 (可逆的)
3、MD5值一般情况下不重复
MD5的个数是有限的,包含af,09组合的超多个数
但数据源是无限的,理论上可能有两个字符串的MD5值一致,但概率微乎其微

4、MD5的算法是固定的,所以每次计算结果是一致的
密码破解 1、 暴力破解-黑客字典 2、社交破解
数据库里面存密码不会存明文,存MD5加密之后的,登录时,把输入密码MD5加密后与数据库比对

作用:
密码加盐:加上一些干扰字符,防止密码破解
注册:用户表增加一个字段储存随机数
填写密码,存储的密码为用户输入的密码加这个随机数生成的MD5
登录时,用户输入密码,数据库找到这个用户的随机数,密码与随机数生成MD5去配对

双MD5加密
MD5(MD5(密码))

文件上传
百度网盘文件上传,上传文件储存这个文件的MD5值(第一次上传慢),当下次有人上传相同文件时,直接把以前文件的MD5值指向它,实现秒上传

C#示例代码

//引入命名空间
using System.Security.Cryptography;

        static void Main(string[] args)
        {
            Console.WriteLine(MDRncriptFile("E:\\test.jpg"));
        }
对字符串取MD5值
        public static string Md(string str)
        {
            //创建一个MD5对象
            MD5 md5 = MD5.Create();
            //把字符串转换为字节流
            byte[] bytes = Encoding.UTF8.GetBytes(str);
            //把字节流转换为MD5值
            byte[] md5Bytes = md5.ComputeHash(bytes);
            //
            StringBuilder sb = new StringBuilder();
            foreach (Byte item in md5Bytes)
            {
                //x表示转换为16进制,2表示保留2位   小写的x全是小写的MD5数值,大写的X全是大写的MD5数值
                sb.Append(item.ToString("X2"));
            }
            return sb.ToString();
        }

对文件取MD5值
//注意路径不能直接在属性处复制,会报错:https://blog.csdn.net/fromfire2/article/details/81035601
        public static string MDRncriptFile(string path)
        {
            //创对象建一个MD4
            MD5 md5 = MD5.Create();
            using (FileStream fs = File.OpenRead(path))
            {
                byte[] Md5Bytes = md5.ComputeHash(fs);
                StringBuilder sb = new StringBuilder();
                foreach (byte item in Md5Bytes)
                {
                    sb.Append(item.ToString("x2"));
                }
                return sb.ToString();
            }
        }

你可能感兴趣的:(通用)