using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace RMYY_CallCenter_Api.Utility { public static partial class StringExtention { /// /// 转为bool /// /// 字符串 /// public static bool ToBool(this string str) { return bool.Parse(str); } /// /// 转为字节数组 /// /// base64字符串 /// public static byte[] ToBytes_FromBase64Str(this string base64Str) { return Convert.FromBase64String(base64Str); } /// /// 转换为MD5加密后的字符串(默认加密为32位) /// /// /// 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(); } /// /// 转换为MD5加密后的字符串(16位) /// /// /// public static string ToMD5String16(this string str) { return str.ToMD5String().Substring(8, 16); } /// /// Base64加密 /// 注:默认采用UTF8编码 /// /// 待加密的明文 /// 加密后的字符串 public static string Base64Encode(this string source) { return Base64Encode(source, Encoding.UTF8); } /// /// Base64加密 /// /// 待加密的明文 /// 加密采用的编码方式 /// 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; } /// /// Base64解密 /// 注:默认使用UTF8编码 /// /// 待解密的密文 /// 解密后的字符串 public static string Base64Decode(this string result) { return Base64Decode(result, Encoding.UTF8); } /// /// Base64解密 /// /// 待解密的密文 /// 解密采用的编码方式,注意和加密时采用的方式一致 /// 解密后的字符串 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; } /// /// Base64Url编码 /// /// 待编码的文本字符串 /// 编码的文本字符串 public static string Base64UrlEncode(this string text) { var plainTextBytes = Encoding.UTF8.GetBytes(text); var base64 = Convert.ToBase64String(plainTextBytes).Replace('+', '-').Replace('/', '_').TrimEnd('='); return base64; } /// /// Base64Url解码 /// /// 使用Base64Url编码后的字符串 /// 解码后的内容 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); } /// /// 计算SHA1摘要 /// 注:默认使用UTF8编码 /// /// 字符串 /// public static byte[] ToSHA1Bytes(this string str) { return str.ToSHA1Bytes(Encoding.UTF8); } /// /// 计算SHA1摘要 /// /// 字符串 /// 编码 /// public static byte[] ToSHA1Bytes(this string str, Encoding encoding) { SHA1 sha1 = new SHA1CryptoServiceProvider(); byte[] inputBytes = encoding.GetBytes(str); byte[] outputBytes = sha1.ComputeHash(inputBytes); return outputBytes; } /// /// 转为SHA1哈希加密字符串 /// 注:默认使用UTF8编码 /// /// 字符串 /// public static string ToSHA1String(this string str) { return str.ToSHA1String(Encoding.UTF8); } /// /// 转为SHA1哈希 /// /// 字符串 /// 编码 /// public static string ToSHA1String(this string str, Encoding encoding) { byte[] sha1Bytes = str.ToSHA1Bytes(encoding); string resStr = BitConverter.ToString(sha1Bytes); return resStr.Replace("-", "").ToLower(); } /// /// SHA256加密 /// /// 字符串 /// 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(); } /// /// HMACSHA256算法 /// /// 内容 /// 密钥 /// 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('='); } } /// /// string转int /// /// 字符串 /// public static int ToInt(this string str) { str = str.Replace("\0", ""); if (string.IsNullOrEmpty(str)) return 0; return Convert.ToInt32(str); } /// /// string转long /// /// 字符串 /// public static long ToLong(this string str) { str = str?.Replace("\0", ""); if (string.IsNullOrEmpty(str)) return 0; return Convert.ToInt64(str); } /// /// 转换为double /// /// 字符串 /// public static double ToDouble(this string str) { return Convert.ToDouble(str); } /// /// string转byte[] /// /// 字符串 /// public static byte[] ToBytes(this string str) { return Encoding.Default.GetBytes(str); } /// /// string转byte[] /// /// 字符串 /// 需要的编码 /// public static byte[] ToBytes(this string str, Encoding theEncoding) { return theEncoding.GetBytes(str); } /// /// 转换为日期格式 /// /// /// public static DateTime ToDateTime(this string str) { return Convert.ToDateTime(str); } /// /// 转为首字母大写 /// /// 字符串 /// public static string ToFirstUpperStr(this string str) { return str.Substring(0, 1).ToUpper() + str.Substring(1); } /// /// 转为首字母小写 /// /// 字符串 /// public static string ToFirstLowerStr(this string str) { return str.Substring(0, 1).ToLower() + str.Substring(1); } /// /// 将枚举类型的文本转为枚举类型 /// /// 枚举类型 /// 枚举文本 /// public static TEnum ToEnum(this string enumText) where TEnum : struct { Enum.TryParse(enumText, out TEnum value); return value; } } }