散列哈希加密
/// <summary> /// 散列哈希加密(MD5 SHA HMACSHA) /// </summary> public static class HashAlgorithmEncrypt { /// <summary> ///返回值类型 /// </summary> public enum UpperLower { /// <summary> /// 大写 /// </summary> Upper, /// <summary> /// 小写 /// </summary> Lower } /// <summary> /// 位数 /// </summary> public enum Bit { /// <summary> /// 16位 /// </summary> bit16, /// <summary> /// 32位 /// </summary> bit32 } #region MD5 /// <summary> /// MD5加密 /// </summary> /// <param name="data">要加密的明文</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="bit">MD5加密16位或32位</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string MD5Encrypt(string data, Encoding dataEncoding, Bit bit, UpperLower upperLower) { using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) { byte[] dataBytes = md5.ComputeHash(dataEncoding.GetBytes(data)); string encryptStr = (bit == Bit.bit16) ? BitConverter.ToString(dataBytes, 4, 8) : BitConverter.ToString(dataBytes); encryptStr = encryptStr.Replace("-", ""); return upperLower == UpperLower.Upper ? encryptStr.ToUpper() : encryptStr.ToLower(); } } #endregion #region SHA /// <summary> /// SHA1 /// </summary> /// <param name="data">要加密的明文</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string SHA1Encrypt(string data, Encoding dataEncoding, UpperLower upperLower) { StringBuilder sb = new StringBuilder(); using (SHA1Managed sha1 = new SHA1Managed()) { byte[] dataBytes = dataEncoding.GetBytes(data); byte[] encryptBytes = sha1.ComputeHash(dataBytes); for (int i = 0; i < encryptBytes.Length; i++) { sb.Append(upperLower == UpperLower.Upper ? encryptBytes[i].ToString("X2") : encryptBytes[i].ToString("x2")); } return sb.ToString(); } } /// <summary> /// SHA256 /// </summary> /// <param name="data">要加密的明文</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string SHA256Encrypt(string data, Encoding dataEncoding, UpperLower upperLower) { StringBuilder sb = new StringBuilder(); using (SHA256Managed sha256 = new SHA256Managed()) { byte[] dataBytes = dataEncoding.GetBytes(data); byte[] encryptBytes = sha256.ComputeHash(dataBytes); for (int i = 0; i < encryptBytes.Length; i++) { sb.Append(upperLower == UpperLower.Upper ? encryptBytes[i].ToString("X2") : encryptBytes[i].ToString("x2")); } return sb.ToString(); } } /// <summary> /// SHA384 /// </summary> /// <param name="data">要加密的明文</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string SHA384Encrypt(string data, Encoding dataEncoding, UpperLower upperLower) { StringBuilder sb = new StringBuilder(); using (SHA384Managed sha384 = new SHA384Managed()) { byte[] dataBytes = dataEncoding.GetBytes(data); byte[] encryptBytes = sha384.ComputeHash(dataBytes); for (int i = 0; i < encryptBytes.Length; i++) { sb.Append(upperLower == UpperLower.Upper ? encryptBytes[i].ToString("X2") : encryptBytes[i].ToString("x2")); } return sb.ToString(); } } /// <summary> /// SHA512 /// </summary> /// <param name="data">要加密的明文</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string SHA512Encrypt(string data, Encoding dataEncoding, UpperLower upperLower) { StringBuilder sb = new StringBuilder(); using (SHA512Managed sha512 = new SHA512Managed()) { byte[] dataBytes = dataEncoding.GetBytes(data); byte[] encryptBytes = sha512.ComputeHash(dataBytes); for (int i = 0; i < encryptBytes.Length; i++) { sb.Append(upperLower == UpperLower.Upper ? encryptBytes[i].ToString("X2") : encryptBytes[i].ToString("x2")); } return sb.ToString(); } } #endregion #region HMACSHA /// <summary> /// HMACMD5 /// </summary> /// <param name="data">要加密的明文</param> /// <param name="key">秘钥</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string HMACMD5Encrypt(string data, string key, Encoding dataEncoding, UpperLower upperLower) { StringBuilder sb = new StringBuilder(); using (HMACMD5 hmacmd5 = new HMACMD5()) { hmacmd5.Key = System.Text.Encoding.UTF8.GetBytes(key); byte[] dataBytes = dataEncoding.GetBytes(data); byte[] encryptBytes = hmacmd5.ComputeHash(dataBytes); for (int i = 0; i < encryptBytes.Length; i++) { sb.Append(upperLower == UpperLower.Upper ? encryptBytes[i].ToString("X2") : encryptBytes[i].ToString("x2")); } return sb.ToString(); } } /// <summary> /// HMACSHA1 /// </summary> /// <param name="data">要加密的明文</param> /// <param name="key">秘钥</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string HMACSHA1Encrypt(string data, string key, Encoding dataEncoding, UpperLower upperLower) { StringBuilder sb = new StringBuilder(); using (HMACSHA1 hmacsha1 = new HMACSHA1()) { hmacsha1.Key = System.Text.Encoding.UTF8.GetBytes(key); byte[] dataBytes = dataEncoding.GetBytes(data); byte[] encryptBytes = hmacsha1.ComputeHash(dataBytes); for (int i = 0; i < encryptBytes.Length; i++) { sb.Append(upperLower == UpperLower.Upper ? encryptBytes[i].ToString("X2") : encryptBytes[i].ToString("x2")); } return sb.ToString(); } } /// <summary> /// HMACSHA256 /// </summary> /// <param name="data">要加密的明文</param> /// <param name="key">秘钥</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string HMACSHA256Encrypt(string data, string key, Encoding dataEncoding, UpperLower upperLower) { StringBuilder sb = new StringBuilder(); using (HMACSHA256 hmacsha256 = new HMACSHA256()) { hmacsha256.Key = System.Text.Encoding.UTF8.GetBytes(key); byte[] dataBytes = dataEncoding.GetBytes(data); byte[] encryptBytes = hmacsha256.ComputeHash(dataBytes); for (int i = 0; i < encryptBytes.Length; i++) { sb.Append(upperLower == UpperLower.Upper ? encryptBytes[i].ToString("X2") : encryptBytes[i].ToString("x2")); } return sb.ToString(); } } /// <summary> /// HMACSHA384(结果有问题) /// </summary> /// <param name="data">要加密的明文</param> /// <param name="key">秘钥</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string HMACSHA384Encrypt(string data, string key, Encoding dataEncoding, UpperLower upperLower) { StringBuilder sb = new StringBuilder(); using (HMACSHA384 hmacsha384 = new HMACSHA384()) { hmacsha384.Key = System.Text.Encoding.UTF8.GetBytes(key); byte[] dataBytes = dataEncoding.GetBytes(data); byte[] encryptBytes = hmacsha384.ComputeHash(dataBytes); for (int i = 0; i < encryptBytes.Length; i++) { sb.Append(upperLower == UpperLower.Upper ? encryptBytes[i].ToString("X2") : encryptBytes[i].ToString("x2")); } return sb.ToString(); } } /// <summary> /// HMACSHA512 /// </summary> /// <param name="data">要加密的明文</param> /// <param name="key">秘钥</param> /// <param name="dataEncoding">加载要加密的明文的编码方式</param> /// <param name="upperLower">密文值返回大小写</param> /// <returns></returns> public static string HMACSHA512Encrypt(string data, string key, Encoding dataEncoding, UpperLower upperLower) { StringBuilder sb = new StringBuilder(); using (HMACSHA512 hmacsha512 = new HMACSHA512()) { hmacsha512.Key = System.Text.Encoding.UTF8.GetBytes(key); byte[] dataBytes = dataEncoding.GetBytes(data); byte[] encryptBytes = hmacsha512.ComputeHash(dataBytes); for (int i = 0; i < encryptBytes.Length; i++) { sb.Append(upperLower == UpperLower.Upper ? encryptBytes[i].ToString("X2") : encryptBytes[i].ToString("x2")); } return sb.ToString(); } } #endregion }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现