• MD5之C#密码加密备忘录


    MD5算法说明:  加密算法都是对字节数组或流进行加密的。MD5的算法则是对原始的字节数组随机(有算法的随机)抽取几个字节,经过运算后返回新的字节(加密以后的字节)。它不 仅可以对字符串进行加密,也可以对文件进行加密。加密以后的数据已经不同于原始的数据,随机抽取字节导致不可逆。内部算法又保证对相同字符串加密的结果相同。MD5值是有限的,但是源数据是无限的,所以存在不同的内容加密后得到相同MD5值的情况(这里也可以看出它的不可逆性)。但是这个概率非常低,所以,我们在给用户密码加密时,一般不考虑这种情况。

    一、对字符串加密

            /// 加密字符串
            /// </summary>
            /// <param name="str">要加密的字符串</param>
            /// <returns>加密后的字符串(MD5值)</returns>
            private string MD5EncryptionString(string str)
            {
                MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
                byte[] temp=System.Text.Encoding.ASCII.GetBytes(str);
                byte[] md5Byte=md5Provider.ComputeHash(temp);
                //直接将字节数据转换成字符串发现发乱码,是因为这个字节数组不一定就是某个字符或字符串的字节数组。
                //string md5Value = System.Text.Encoding.ASCII.GetString(md5Byte);
                string md5Value = string.Empty;
                //整个字节数组转不成功,我们就转换它的每一个字节,将每一个字节转换成十六进制数
                //1.“x”表示十六进制小写
                //2.“X”表示十六进制大写
                foreach (var item in md5Byte)
                {
                    md5Value += item.ToString("x2");
                }
                return md5Value;
            }

    二、对文件加密

             /// <summary>
            /// 加密文件
            /// </summary>
            /// <param name="filePath">文件路径</param>
            /// <returns>加密后的字符串</returns>
            private string MD5EncryptionFile(string filePath)
            {
                MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
                byte[] md5Byte = null;
                string md5Value = string.Empty;
                using(FileStream fs=new FileStream (filePath,FileMode.Open))
                {
                    md5Byte = provider.ComputeHash(fs);
                }
                foreach (var item in md5Byte)
                {
                    md5Value += item.ToString("x2");
                }
                return md5Value;
            }

  • 相关阅读:
    谈谈Ext JS的组件——组件基类:Ext.Component
    谈谈Ext JS组件之引子
    安装Compass时不能访问服务器的问题
    Android 官方命令深入分析之Android Debug Bridge(adb)
    Android 官方命令深入分析
    Libgdx1.6.2发布,跨平台游戏开发框架
    Libgdx 1.6.1发布,跨平台游戏开发框架
    【翻译】Ext JS 6 Beta发布
    Springboot配置时间格式
    Thymeleaf在前台下拉列表获取后台传的值
  • 原文地址:https://www.cnblogs.com/XChWaad/p/2625025.html
Copyright © 2020-2023  润新知