//MD5的用途? //1 防篡改: //发个文档,事先给别人一个MD5,是文档的摘要, //源代码管理器svn--即使电脑断网了,文件有任何改动都能被发现--本地存了一个文件的MD5--文件有更新,就再对比下MD5 //极速秒传--扫描文件的MD5--跟已有的文件MD5比对--吻合表示文件已存在不用再上传 //2 密码保存,防止看到明文 //密码应该只有用户知道----数据库不能存明文---但是又需要验证 //MD5加密下原始密码---数据库存密文---下次登录把密码MD5后再比对 //密文是可见的,所以要求密码不能太简单,加盐(123456+zhaoxi) //3 防止抵赖,数字签名 //把一些内容摘要一下,由权威的第三方去保障,将来这个文件就是你做的,不能抵赖
//MD5的用途? //1 防篡改: //发个文档,事先给别人一个MD5,是文档的摘要, //源代码管理器svn--即使电脑断网了,文件有任何改动都能被发现--本地存了一个文件的MD5--文件有更新,就再对比下MD5 //极速秒传--扫描文件的MD5--跟已有的文件MD5比对--吻合表示文件已存在不用再上传 //2 密码保存,防止看到明文 //密码应该只有用户知道----数据库不能存明文---但是又需要验证 //MD5加密下原始密码---数据库存密文---下次登录把密码MD5后再比对 //密文是可见的,所以要求密码不能太简单,加盐(123456+zhaoxi) //3 防止抵赖,数字签名 //把一些内容摘要一下,由权威的第三方去保障,将来这个文件就是你做的,不能抵赖 /// <summary> /// 不可逆加密 /// 1 防止被篡改 /// 2 防止明文存储 /// 3 防止抵赖,数字签名 /// </summary> public class MD5Encrypt { #region MD5 /// <summary> /// MD5加密,和动网上的16/32位MD5加密结果相同, /// 使用的UTF8编码 /// </summary> /// <param name="source">待加密字串</param> /// <param name="length">16或32值之一,其它则采用.net默认MD5加密算法</param> /// <returns>加密后的字串</returns> public static string Encrypt(string source, int length = 32)//默认参数 { if (string.IsNullOrEmpty(source)) return string.Empty; HashAlgorithm provider = CryptoConfig.CreateFromName("MD5") as HashAlgorithm; byte[] bytes = Encoding.UTF8.GetBytes(source);//这里需要区别编码的 byte[] hashValue = provider.ComputeHash(bytes); StringBuilder sb = new StringBuilder(); switch (length) { case 16://16位密文是32位密文的9到24位字符 for (int i = 4; i < 12; i++) { sb.Append(hashValue[i].ToString("x2")); } break; case 32: for (int i = 0; i < 16; i++) { sb.Append(hashValue[i].ToString("x2")); } break; default: for (int i = 0; i < hashValue.Length; i++) { sb.Append(hashValue[i].ToString("x2")); } break; } return sb.ToString(); } #endregion MD5 #region MD5摘要 /// <summary> /// 获取文件的MD5摘要 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static string AbstractFile(string fileName) { using (FileStream file = new FileStream(fileName, FileMode.Open)) { return AbstractFile(file); } } /// <summary> /// 根据stream获取文件摘要 /// </summary> /// <param name="stream"></param> /// <returns></returns> public static string AbstractFile(Stream stream) { MD5 md5 = new MD5CryptoServiceProvider(); byte[] retVal = md5.ComputeHash(stream); StringBuilder sb = new StringBuilder(); for (int i = 0; i < retVal.Length; i++) { sb.Append(retVal[i].ToString("x2")); } return sb.ToString(); } #endregion }
标签:文件,加密,string,--,sb,MD5 From: https://www.cnblogs.com/FanJunCheng521/p/17168477.html