string字符串扩展
/// <summary> /// /// </summary> public static class StringExtentions { /// <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 = new SHA1CryptoServiceProvider(); 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('='); } } /// <summary> /// string转int /// </summary> /// <param name="str">字符串</param> /// <returns></returns> public static int ToInt(this string str) { str = str.Replace("\0", ""); if (string.IsNullOrEmpty(str)) return 0; return Convert.ToInt32(str); } /// <summary> /// string转long /// </summary> /// <param name="str">字符串</param> /// <returns></returns> public static long ToLong(this string str) { str = str.Replace("\0", ""); if (string.IsNullOrEmpty(str)) return 0; return Convert.ToInt64(str); } /// <summary> /// 二进制字符串转为Int /// </summary> /// <param name="str">二进制字符串</param> /// <returns></returns> public static int ToInt_FromBinString(this string str) { return Convert.ToInt32(str, 2); } /// <summary> /// 将16进制字符串转为Int /// </summary> /// <param name="str">数值</param> /// <returns></returns> public static int ToInt0X(this string str) { int num = Int32.Parse(str, NumberStyles.HexNumber); return num; } /// <summary> /// 转换为double /// </summary> /// <param name="str">字符串</param> /// <returns></returns> public static double ToDouble(this string str) { return Convert.ToDouble(str); } /// <summary> /// string转byte[] /// </summary> /// <param name="str">字符串</param> /// <returns></returns> public static byte[] ToBytes(this string str) { return Encoding.Default.GetBytes(str); } /// <summary> /// string转byte[] /// </summary> /// <param name="str">字符串</param> /// <param name="theEncoding">需要的编码</param> /// <returns></returns> public static byte[] ToBytes(this string str, Encoding theEncoding) { return theEncoding.GetBytes(str); } /// <summary> /// 将16进制字符串转为Byte数组 /// </summary> /// <param name="str">16进制字符串(2个16进制字符表示一个Byte)</param> /// <returns></returns> public static byte[] To0XBytes(this string str) { List<byte> resBytes = new List<byte>(); for (int i = 0; i < str.Length; i = i + 2) { string numStr = $@"{str[i]}{str[i + 1]}"; resBytes.Add((byte)numStr.ToInt0X()); } return resBytes.ToArray(); } /// <summary> /// 将ASCII码形式的字符串转为对应字节数组 /// 注:一个字节一个ASCII码字符 /// </summary> /// <param name="str">字符串</param> /// <returns></returns> public static byte[] ToASCIIBytes(this string str) { return str.ToList().Select(x => (byte)x).ToArray(); } /// <summary> /// 转为网络终结点IPEndPoint /// </summary>= /// <param name="str">字符串</param> /// <returns></returns> public static IPEndPoint ToIPEndPoint(this string str) { IPEndPoint iPEndPoint = null; try { string[] strArray = str.Split(':').ToArray(); string addr = strArray[0]; int port = Convert.ToInt32(strArray[1]); iPEndPoint = new IPEndPoint(IPAddress.Parse(addr), port); } catch { iPEndPoint = null; } return iPEndPoint; } /// <summary> /// 将枚举类型的文本转为枚举类型 /// </summary> /// <typeparam name="TEnum">枚举类型</typeparam> /// <param name="enumText">枚举文本</param> /// <returns></returns> public static TEnum ToEnum<TEnum>(this string enumText) where TEnum : struct { Enum.TryParse(enumText, out TEnum value); return value; } /// <summary> /// 是否为弱密码 /// 注:密码必须包含数字、小写字母、大写字母和其他符号中的两种并且长度大于8 /// </summary> /// <param name="pwd">密码</param> /// <returns></returns> public static bool IsWeakPwd(this string pwd) { if (pwd.IsNullOrEmpty()) throw new Exception("pwd不能为空"); string pattern = "(^[0-9]+$)|(^[a-z]+$)|(^[A-Z]+$)|(^.{0,8}$)"; if (Regex.IsMatch(pwd, pattern)) return true; else return false; } /// <summary> /// 获取字符串中的所有邮件地址并转为小写 /// </summary> /// <param name="text"></param> /// <returns></returns> public static List<string> GetEmailAddress(this string text) { string pattern = "([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+)"; return Regex.Matches(text, pattern).Cast<Match>().Select(x => x.Groups[0].ToString().ToLower()).ToList(); } private static readonly Encoding _utf8Encoder = Encoding.GetEncoding( "UTF-8", new EncoderReplacementFallback(string.Empty), new DecoderExceptionFallback() ); /// <summary> /// 移除非utf8字符 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string RemoveNotUtf8(this string str) { return _utf8Encoder.GetString(_utf8Encoder.GetBytes(str)); } /// <summary> /// RSA SHA256签名 /// </summary> /// <param name="str">字符串</param> /// <param name="privateKey">私钥(PKCS1 若是JAVA的PKCS8则需要使用RSAPrivateKeyJavaToDotNet转换)</param> /// <returns></returns> public static string RSASign(string str, string privateKey) { //根据需要加签时的哈希算法转化成对应的hash字符节 byte[] bt = Encoding.GetEncoding("utf-8").GetBytes(str); var sha256 = new SHA256CryptoServiceProvider(); byte[] rgbHash = sha256.ComputeHash(bt); RSACryptoServiceProvider key = new RSACryptoServiceProvider(); key.FromXmlString(privateKey); RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(key); formatter.SetHashAlgorithm("SHA256"); //此处是你需要加签的hash算法,需要和上边你计算的hash值的算法一致,不然会报错。 byte[] inArray = formatter.CreateSignature(rgbHash); return Convert.ToBase64String(inArray); } /// <summary> /// RSA私钥格式转换,java 2 .net /// </summary> /// <param name="privateKey">java生成的RSA私钥</param> /// <returns></returns> public static string RSAPrivateKeyJavaToDotNet(string privateKey) { RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey)); return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>", Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned())); } }
作者:阿笨
【官方QQ一群:跟着阿笨一起玩NET(已满)】:422315558
【官方QQ二群:跟着阿笨一起玩C#(已满)】:574187616
【官方QQ三群:跟着阿笨一起玩ASP.NET(已满)】:967920586
【官方QQ四群:Asp.Net Core跨平台技术开发(可加入)】:829227829
【官方QQ五群:.NET Core跨平台开发技术(可加入)】:647639415
【网易云课堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628
【腾讯课堂】:https://abennet.ke.qq.com
【51CTO学院】:https://edu.51cto.com/sd/66c64
【微信公众号】:微信搜索:跟着阿笨一起玩NET