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;
}
}
}