using HtmlAgilityPack; using System; using System.Globalization; using System.Linq; using System.Security.Cryptography; using System.Text; namespace Infrastructure.Extensions { public static class StringExtensions { public static string Format(this string value, params object[] args) { return string.Format(CultureInfo.InvariantCulture, value, args); } public static string GetExtension(this string filename) { if (filename is null) { throw new ArgumentNullException(nameof(filename)); } return filename.Substring(filename.LastIndexOf('.') + 1).ToLower(CultureInfo.InvariantCulture); } public static string GetSummary(this string value, int length = 32) { if (string.IsNullOrWhiteSpace(value)) { return value; } if (value.Length > length) { return value.Substring(0, length) + "..."; } return value; } public static string HtmlToText(this string html, int length = 10) { if (string.IsNullOrWhiteSpace(html)) { return html; } var result = string.Empty; var doc = new HtmlDocument(); doc.LoadHtml(html); var builder = new StringBuilder(); builder.Append(result); foreach (var item in doc.DocumentNode.ChildNodes) { builder.Append(item.InnerText); if (result.Length >= length) { result = result.Substring(0, length); break; } } result = builder.ToString(); return result; } public static byte[] StringToByteArray(this string hex) { if (hex is null) { throw new ArgumentNullException(nameof(hex)); } return Enumerable.Range(0, hex.Length / 2).Select(x => Convert.ToByte(hex.Substring(x * 2, 2), 16)).ToArray(); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5351:不要使用损坏的加密算法", Justification = "<挂起>")] public static string DESEncrypt(this string value, string key) { using var des = new DESCryptoServiceProvider(); var inputByteArray = Encoding.Default.GetBytes(value); var md5Key = key.Md5().Substring(0, 8); des.Key = ASCIIEncoding.ASCII.GetBytes(md5Key); des.IV = ASCIIEncoding.ASCII.GetBytes(md5Key); using var ms = new System.IO.MemoryStream(); using var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); var ret = new StringBuilder(); foreach (var item in ms.ToArray()) { ret.AppendFormat(CultureInfo.InvariantCulture, "{0:X2}", item); } return ret.ToString(); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5351:不要使用损坏的加密算法", Justification = "<挂起>")] public static string DESDecrypt(this string value, string key) { if (value is null) { throw new ArgumentNullException(nameof(value)); } using var des = new DESCryptoServiceProvider(); var len = value.Length / 2; byte[] inputByteArray = new byte[len]; for (int i = 0; i < len; i++) { inputByteArray[i] = (byte)Convert.ToInt32(value.Substring(i * 2, 2), 16); } var md5Key = key.Md5().Substring(0, 8); des.Key = ASCIIEncoding.ASCII.GetBytes(md5Key); des.IV = ASCIIEncoding.ASCII.GetBytes(md5Key); using var ms = new System.IO.MemoryStream(); using var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); return Encoding.Default.GetString(ms.ToArray()); } public static Guid ToGuid(this string input) { #pragma warning disable CA5351 // 不要使用损坏的加密算法 using MD5 md5 = MD5.Create(); #pragma warning restore CA5351 // 不要使用损坏的加密算法 var hash = md5.ComputeHash(Encoding.UTF8.GetBytes(input)); var guid = new Guid(hash); //list.Add(input, guid.ToString()); return guid; } } }