| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- using System.Data;
- using System.Security.Cryptography;
- using System.Text;
- namespace Net6Demo_Api.Util
- {
- public static partial class Extention
- {
- /// <summary>
- /// 转换为MD5加密后的字符串(默认加密为32位)
- /// </summary>
- /// <param name="str"></param>
- /// <returns></returns>
- public static string ToMD5String(this string str)
- {
- MD5 md5 = MD5.Create();
- byte[] inputBytes = Encoding.UTF8.GetBytes(str);
- byte[] hashBytes = md5.ComputeHash(inputBytes);
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < hashBytes.Length; i++)
- {
- sb.Append(hashBytes[i].ToString("x2"));
- }
- md5.Dispose();
- return sb.ToString();
- }
- /// <summary>
- /// 转换为MD5加密后的字符串(16位)
- /// </summary>
- /// <param name="str"></param>
- /// <returns></returns>
- public static string ToMD5String16(this string str)
- {
- return str.ToMD5String().Substring(8, 16);
- }
- /// <summary>
- /// Base64加密
- /// 注:默认采用UTF8编码
- /// </summary>
- /// <param name="source">待加密的明文</param>
- /// <returns>加密后的字符串</returns>
- public static string Base64Encode(this string source)
- {
- return Base64Encode(source, Encoding.UTF8);
- }
- /// <summary>
- /// Base64加密
- /// </summary>
- /// <param name="source">待加密的明文</param>
- /// <param name="encoding">加密采用的编码方式</param>
- /// <returns></returns>
- public static string Base64Encode(this string source, Encoding encoding)
- {
- string encode = string.Empty;
- byte[] bytes = encoding.GetBytes(source);
- try
- {
- encode = Convert.ToBase64String(bytes);
- }
- catch
- {
- encode = source;
- }
- return encode;
- }
- /// <summary>
- /// Base64解密
- /// 注:默认使用UTF8编码
- /// </summary>
- /// <param name="result">待解密的密文</param>
- /// <returns>解密后的字符串</returns>
- public static string Base64Decode(this string result)
- {
- return Base64Decode(result, Encoding.UTF8);
- }
- /// <summary>
- /// Base64解密
- /// </summary>
- /// <param name="result">待解密的密文</param>
- /// <param name="encoding">解密采用的编码方式,注意和加密时采用的方式一致</param>
- /// <returns>解密后的字符串</returns>
- public static string Base64Decode(this string result, Encoding encoding)
- {
- string decode = string.Empty;
- byte[] bytes = Convert.FromBase64String(result);
- try
- {
- decode = encoding.GetString(bytes);
- }
- catch
- {
- decode = result;
- }
- return decode;
- }
- /// <summary>
- /// Base64Url编码
- /// </summary>
- /// <param name="text">待编码的文本字符串</param>
- /// <returns>编码的文本字符串</returns>
- public static string Base64UrlEncode(this string text)
- {
- var plainTextBytes = Encoding.UTF8.GetBytes(text);
- var base64 = Convert.ToBase64String(plainTextBytes).Replace('+', '-').Replace('/', '_').TrimEnd('=');
- return base64;
- }
- /// <summary>
- /// Base64Url解码
- /// </summary>
- /// <param name="base64UrlStr">使用Base64Url编码后的字符串</param>
- /// <returns>解码后的内容</returns>
- public static string Base64UrlDecode(this string base64UrlStr)
- {
- base64UrlStr = base64UrlStr.Replace('-', '+').Replace('_', '/');
- switch (base64UrlStr.Length % 4)
- {
- case 2:
- base64UrlStr += "==";
- break;
- case 3:
- base64UrlStr += "=";
- break;
- }
- var bytes = Convert.FromBase64String(base64UrlStr);
- return Encoding.UTF8.GetString(bytes);
- }
- /// <summary>
- /// 计算SHA1摘要
- /// 注:默认使用UTF8编码
- /// </summary>
- /// <param name="str">字符串</param>
- /// <returns></returns>
- public static byte[] ToSHA1Bytes(this string str)
- {
- return str.ToSHA1Bytes(Encoding.UTF8);
- }
- /// <summary>
- /// 计算SHA1摘要
- /// </summary>
- /// <param name="str">字符串</param>
- /// <param name="encoding">编码</param>
- /// <returns></returns>
- public static byte[] ToSHA1Bytes(this string str, Encoding encoding)
- {
- SHA1 sha1 = SHA1.Create();
- byte[] inputBytes = encoding.GetBytes(str);
- byte[] outputBytes = sha1.ComputeHash(inputBytes);
- return outputBytes;
- }
- /// <summary>
- /// 转为SHA1哈希加密字符串
- /// 注:默认使用UTF8编码
- /// </summary>
- /// <param name="str">字符串</param>
- /// <returns></returns>
- public static string ToSHA1String(this string str)
- {
- return str.ToSHA1String(Encoding.UTF8);
- }
- /// <summary>
- /// 转为SHA1哈希
- /// </summary>
- /// <param name="str">字符串</param>
- /// <param name="encoding">编码</param>
- /// <returns></returns>
- public static string ToSHA1String(this string str, Encoding encoding)
- {
- byte[] sha1Bytes = str.ToSHA1Bytes(encoding);
- string resStr = BitConverter.ToString(sha1Bytes);
- return resStr.Replace("-", "").ToLower();
- }
- /// <summary>
- /// SHA256加密
- /// </summary>
- /// <param name="str">字符串</param>
- /// <returns></returns>
- public static string ToSHA256String(this string str)
- {
- byte[] bytes = Encoding.UTF8.GetBytes(str);
- byte[] hash = SHA256.Create().ComputeHash(bytes);
- StringBuilder builder = new StringBuilder();
- for (int i = 0; i < hash.Length; i++)
- {
- builder.Append(hash[i].ToString("x2"));
- }
- return builder.ToString();
- }
- /// <summary>
- /// HMACSHA256算法
- /// </summary>
- /// <param name="text">内容</param>
- /// <param name="secret">密钥</param>
- /// <returns></returns>
- public static string ToHMACSHA256String(this string text, string secret)
- {
- secret = secret ?? "";
- byte[] keyByte = Encoding.UTF8.GetBytes(secret);
- byte[] messageBytes = Encoding.UTF8.GetBytes(text);
- using (var hmacsha256 = new HMACSHA256(keyByte))
- {
- byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
- return Convert.ToBase64String(hashmessage).Replace('+', '-').Replace('/', '_').TrimEnd('=');
- }
- }
- }
- }
|