瀏覽代碼

升级加密解密api

懒得勤快 2 年之前
父節點
當前提交
408dc626fb

+ 1 - 1
Masuit.Tools.Abstractions/Extensions/BaseType/IEnumerableExtensions.cs

@@ -48,7 +48,7 @@ public static class IEnumerableExtensions
     /// <param name="second"></param>
     /// <param name="keySelector"></param>
     /// <returns></returns>
-    public static IEnumerable<TSource> IntersectBy<TSource, TKey>(this IEnumerable<TSource> first, IEnumerable<TSource> second, Func<TSource, TKey> keySelector, IEqualityComparer<TKey>? comparer)
+    public static IEnumerable<TSource> IntersectBy<TSource, TKey>(this IEnumerable<TSource> first, IEnumerable<TSource> second, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
     {
         if (first == null)
             throw new ArgumentNullException(nameof(first));

+ 23 - 11
Masuit.Tools.Abstractions/Files/FileExt.cs

@@ -38,13 +38,10 @@ namespace Masuit.Tools.Files
             using var fsWrite = new FileStream(dest, FileMode.OpenOrCreate, FileAccess.ReadWrite);
             byte[] buf = new byte[bufferSize];
             int len;
-            await Task.Run(() =>
+            while ((len = await fs.ReadAsync(buf, 0, buf.Length)) != 0)
             {
-                while ((len = fs.Read(buf, 0, buf.Length)) != 0)
-                {
-                    fsWrite.Write(buf, 0, len);
-                }
-            }).ConfigureAwait(true);
+                await fsWrite.WriteAsync(buf, 0, len);
+            }
         }
 
         /// <summary>
@@ -74,6 +71,20 @@ namespace Masuit.Tools.Files
         /// <returns>sha1 值16进制字符串</returns>
         public static string GetFileSha1(this Stream fs) => HashFile(fs, "sha1");
 
+        /// <summary>
+        /// 计算文件的 sha256 值
+        /// </summary>
+        /// <param name="fs">源文件流</param>
+        /// <returns>sha256 值16进制字符串</returns>
+        public static string GetFileSha256(this Stream fs) => HashFile(fs, "sha256");
+
+        /// <summary>
+        /// 计算文件的 sha512 值
+        /// </summary>
+        /// <param name="fs">源文件流</param>
+        /// <returns>sha512 值16进制字符串</returns>
+        public static string GetFileSha512(this Stream fs) => HashFile(fs, "sha512");
+
         /// <summary>
         /// 计算文件的哈希值
         /// </summary>
@@ -82,14 +93,15 @@ namespace Masuit.Tools.Files
         /// <returns>哈希值16进制字符串</returns>
         private static string HashFile(Stream fs, string algo)
         {
-            HashAlgorithm crypto = algo switch
+            using HashAlgorithm crypto = algo switch
             {
-                "sha1" => new SHA1CryptoServiceProvider(),
-                _ => new MD5CryptoServiceProvider(),
+                "sha1" => SHA1.Create(),
+                "sha256" => SHA256.Create(),
+                "sha512" => SHA512.Create(),
+                _ => MD5.Create(),
             };
             byte[] retVal = crypto.ComputeHash(fs);
-
-            StringBuilder sb = new StringBuilder();
+            var sb = new StringBuilder();
             foreach (var t in retVal)
             {
                 sb.Append(t.ToString("x2"));

+ 71 - 205
Masuit.Tools.Abstractions/Security/Encrypt.cs

@@ -28,7 +28,7 @@ namespace Masuit.Tools.Security
             }
 
             StringBuilder ret = new StringBuilder();
-            using var des = new DESCryptoServiceProvider();
+            using var des = DES.Create();
             byte[] inputByteArray = Encoding.Default.GetBytes(strText);
             des.Key = Encoding.ASCII.GetBytes(strEncrKey.Substring(0, 8));
             des.IV = Encoding.ASCII.GetBytes(strEncrKey.Substring(0, 8));
@@ -55,7 +55,7 @@ namespace Masuit.Tools.Security
         public static string DesEncrypt(this string strText, byte[] desKey, byte[] desIV)
         {
             StringBuilder ret = new StringBuilder();
-            using var des = new DESCryptoServiceProvider();
+            using var des = DES.Create();
             byte[] inputByteArray = Encoding.Default.GetBytes(strText);
             des.Key = desKey;
             des.IV = desIV;
@@ -96,7 +96,7 @@ namespace Masuit.Tools.Security
             byte[] bin = new byte[100];
             long rdlen = 0;
             long totlen = fin.Length;
-            DES des = new DESCryptoServiceProvider();
+            using var des = DES.Create();
             var encStream = new CryptoStream(fout, des.CreateEncryptor(byKey, iv), CryptoStreamMode.Write);
             while (rdlen < totlen)
             {
@@ -120,7 +120,7 @@ namespace Masuit.Tools.Security
             byte[] bin = new byte[100];
             long rdlen = 0;
             long totlen = fin.Length;
-            DES des = new DESCryptoServiceProvider();
+            using var des = DES.Create();
             var encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
             while (rdlen < totlen)
             {
@@ -155,7 +155,7 @@ namespace Masuit.Tools.Security
             byte[] bin = new byte[100];
             long rdlen = 0;
             long totlen = fin.Length;
-            using DES des = new DESCryptoServiceProvider();
+            using var des = DES.Create();
             var encStream = new CryptoStream(fout, des.CreateDecryptor(byKey, iv), CryptoStreamMode.Write);
             while (rdlen < totlen)
             {
@@ -179,7 +179,7 @@ namespace Masuit.Tools.Security
             byte[] bin = new byte[100];
             long rdlen = 0;
             long totlen = fin.Length;
-            using DES des = new DESCryptoServiceProvider();
+            using var des = DES.Create();
             var encStream = new CryptoStream(fout, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write);
             while (rdlen < totlen)
             {
@@ -204,7 +204,7 @@ namespace Masuit.Tools.Security
             }
 
             var ms = new MemoryStream();
-            using var des = new DESCryptoServiceProvider();
+            using var des = DES.Create();
             var inputByteArray = new byte[pToDecrypt.Length / 2];
             for (int x = 0; x < pToDecrypt.Length / 2; x++)
             {
@@ -231,7 +231,7 @@ namespace Masuit.Tools.Security
         public static string DesDecrypt(this string pToDecrypt, byte[] desKey, byte[] desIV)
         {
             var ms = new MemoryStream();
-            using var des = new DESCryptoServiceProvider();
+            using var des = DES.Create();
             var inputByteArray = new byte[pToDecrypt.Length / 2];
             for (int x = 0; x < pToDecrypt.Length / 2; x++)
             {
@@ -249,27 +249,9 @@ namespace Masuit.Tools.Security
 
         #endregion
 
-        #region 对称加密算法AES RijndaelManaged加密解密
+        #region 对称加密算法AES加密解密
 
-        private static byte[] Keys =
-        {
-            0x41,
-            0x72,
-            0x65,
-            0x79,
-            0x6F,
-            0x75,
-            0x6D,
-            0x79,
-            0x53,
-            0x6E,
-            0x6F,
-            0x77,
-            0x6D,
-            0x61,
-            0x6E,
-            0x3F
-        };
+        private static byte[] Keys = { 0x41, 0x72, 0x65, 0x79, 0x6F, 0x75, 0x6D, 0x79, 0x53, 0x6E, 0x6F, 0x77, 0x6D, 0x61, 0x6E, 0x3F };
 
         /// <summary>
         /// 生成符合AES加密规则的密钥
@@ -278,17 +260,15 @@ namespace Masuit.Tools.Security
         /// <returns></returns>
         public static string GenerateAesKey(int length)
         {
-            var crypto = new AesCryptoServiceProvider
-            {
-                KeySize = length,
-                BlockSize = 128
-            };
-            crypto.GenerateKey();
-            return Convert.ToBase64String(crypto.Key);
+            using var aes = Aes.Create();
+            aes.KeySize = length;
+            aes.BlockSize = 128;
+            aes.GenerateKey();
+            return Convert.ToBase64String(aes.Key);
         }
 
         /// <summary>
-        /// 对称加密算法AES RijndaelManaged加密(RijndaelManaged(AES)算法是块式加密算法)
+        /// 对称加密算法AES(块式加密算法)
         /// </summary>
         /// <param name="encryptString">待加密字符串</param>
         /// <param name="encryptKey">加密密钥,须半角字符</param>
@@ -298,25 +278,23 @@ namespace Masuit.Tools.Security
         {
             encryptKey = GetSubString(encryptKey, 32, "");
             encryptKey = encryptKey.PadRight(32, ' ');
-            using var rijndaelProvider = new RijndaelManaged
-            {
-                Key = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 32)),
-                IV = Keys,
-                Mode = mode
-            };
-            using ICryptoTransform rijndaelEncrypt = rijndaelProvider.CreateEncryptor();
+            using var aes = Aes.Create("AesManaged");
+            aes.Key = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 32));
+            aes.IV = Keys;
+            aes.Mode = mode;
+            using ICryptoTransform rijndaelEncrypt = aes.CreateEncryptor();
             byte[] inputData = Encoding.UTF8.GetBytes(encryptString);
             byte[] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 0, inputData.Length);
             return Convert.ToBase64String(encryptedData);
         }
 
         /// <summary>
-        /// 对称加密算法AES RijndaelManaged加密(RijndaelManaged(AES)算法是块式加密算法)
+        /// 对称加密算法AES加密(块式加密算法)
         /// </summary>
         /// <param name="encryptString">待加密字符串</param>
         /// <param name="options">加密选项</param>
         /// <returns>加密结果字符串</returns>
-        public static string AESEncrypt(this string encryptString, RijndaelManaged options)
+        public static string AESEncrypt(this string encryptString, Aes options)
         {
             using ICryptoTransform rijndaelEncrypt = options.CreateEncryptor();
             byte[] inputData = Encoding.UTF8.GetBytes(encryptString);
@@ -325,7 +303,7 @@ namespace Masuit.Tools.Security
         }
 
         /// <summary>
-        /// 对称加密算法AES RijndaelManaged加密(RijndaelManaged(AES)算法是块式加密算法)
+        /// 对称加密算法AES加密(块式加密算法)
         /// </summary>
         /// <param name="encryptString">待加密字符串</param>
         /// <param name="encryptKey">加密密钥,须半角字符</param>
@@ -333,20 +311,18 @@ namespace Masuit.Tools.Security
         /// <returns>加密结果字符串</returns>
         public static string AESEncrypt(this string encryptString, byte[] encryptKey, CipherMode mode = CipherMode.CBC)
         {
-            using var rijndaelProvider = new RijndaelManaged
-            {
-                Key = encryptKey,
-                IV = Keys,
-                Mode = mode
-            };
-            using ICryptoTransform rijndaelEncrypt = rijndaelProvider.CreateEncryptor();
+            using var aes = Aes.Create("AesManaged");
+            aes.Key = encryptKey;
+            aes.IV = Keys;
+            aes.Mode = mode;
+            using ICryptoTransform rijndaelEncrypt = aes.CreateEncryptor();
             byte[] inputData = Encoding.UTF8.GetBytes(encryptString);
             byte[] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 0, inputData.Length);
             return Convert.ToBase64String(encryptedData);
         }
 
         /// <summary>
-        /// 对称加密算法AES RijndaelManaged解密字符串
+        /// 对称加密算法AES解密字符串
         /// </summary>
         /// <param name="decryptString">待解密的字符串</param>
         /// <param name="decryptKey">解密密钥,和加密密钥相同</param>
@@ -358,13 +334,11 @@ namespace Masuit.Tools.Security
             {
                 decryptKey = GetSubString(decryptKey, 32, "");
                 decryptKey = decryptKey.PadRight(32, ' ');
-                using var rijndaelProvider = new RijndaelManaged()
-                {
-                    Key = Encoding.UTF8.GetBytes(decryptKey),
-                    IV = Keys,
-                    Mode = mode
-                };
-                using ICryptoTransform rijndaelDecrypt = rijndaelProvider.CreateDecryptor();
+                using var aes = Aes.Create("AesManaged");
+                aes.Key = Encoding.UTF8.GetBytes(decryptKey);
+                aes.IV = Keys;
+                aes.Mode = mode;
+                using ICryptoTransform rijndaelDecrypt = aes.CreateDecryptor();
                 byte[] inputData = Convert.FromBase64String(decryptString);
                 byte[] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData, 0, inputData.Length);
                 return Encoding.UTF8.GetString(decryptedData);
@@ -376,12 +350,12 @@ namespace Masuit.Tools.Security
         }
 
         /// <summary>
-        /// 对称加密算法AES RijndaelManaged解密字符串
+        /// 对称加密算法AES解密字符串
         /// </summary>
         /// <param name="decryptString">待解密的字符串</param>
         /// <param name="options">加密选项</param>
         /// <returns>解密成功返回解密后的字符串,失败返回空</returns>
-        public static string AESDecrypt(this string decryptString, RijndaelManaged options)
+        public static string AESDecrypt(this string decryptString, Aes options)
         {
             try
             {
@@ -397,7 +371,7 @@ namespace Masuit.Tools.Security
         }
 
         /// <summary>
-        /// 对称加密算法AES RijndaelManaged解密字符串
+        /// 对称加密算法AES解密字符串
         /// </summary>
         /// <param name="decryptString">待解密的字符串</param>
         /// <param name="decryptKey">解密密钥,和加密密钥相同</param>
@@ -407,13 +381,11 @@ namespace Masuit.Tools.Security
         {
             try
             {
-                using var rijndaelProvider = new RijndaelManaged()
-                {
-                    Key = decryptKey,
-                    IV = Keys,
-                    Mode = mode
-                };
-                using ICryptoTransform rijndaelDecrypt = rijndaelProvider.CreateDecryptor();
+                using var aes = Aes.Create("AesManaged");
+                aes.Key = decryptKey;
+                aes.IV = Keys;
+                aes.Mode = mode;
+                using ICryptoTransform rijndaelDecrypt = aes.CreateDecryptor();
                 byte[] inputData = Convert.FromBase64String(decryptString);
                 byte[] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData, 0, inputData.Length);
                 return Encoding.UTF8.GetString(decryptedData);
@@ -531,13 +503,11 @@ namespace Masuit.Tools.Security
         {
             decryptKey = GetSubString(decryptKey, 32, "");
             decryptKey = decryptKey.PadRight(32, ' ');
-            using var rijndaelProvider = new RijndaelManaged()
-            {
-                Key = Encoding.UTF8.GetBytes(decryptKey),
-                IV = Keys,
-                Mode = mode
-            };
-            using var encrypto = rijndaelProvider.CreateEncryptor();
+            using var aes = Aes.Create("AesManaged");
+            aes.Key = Encoding.UTF8.GetBytes(decryptKey);
+            aes.IV = Keys;
+            aes.Mode = mode;
+            using var encrypto = aes.CreateEncryptor();
             return new CryptoStream(fs, encrypto, CryptoStreamMode.Write);
         }
 
@@ -550,13 +520,11 @@ namespace Masuit.Tools.Security
         /// <returns>加密流</returns>
         public static CryptoStream AESEncryptStrream(this FileStream fs, byte[] decryptKey, CipherMode mode = CipherMode.CBC)
         {
-            using var rijndaelProvider = new RijndaelManaged()
-            {
-                Key = decryptKey,
-                IV = Keys,
-                Mode = mode
-            };
-            using var encrypto = rijndaelProvider.CreateEncryptor();
+            using var aes = Aes.Create("AesManaged");
+            aes.Key = decryptKey;
+            aes.IV = Keys;
+            aes.Mode = mode;
+            using var encrypto = aes.CreateEncryptor();
             return new CryptoStream(fs, encrypto, CryptoStreamMode.Write);
         }
 
@@ -571,13 +539,11 @@ namespace Masuit.Tools.Security
         {
             decryptKey = GetSubString(decryptKey, 32, "");
             decryptKey = decryptKey.PadRight(32, ' ');
-            using var rijndaelProvider = new RijndaelManaged()
-            {
-                Key = Encoding.UTF8.GetBytes(decryptKey),
-                IV = Keys,
-                Mode = mode
-            };
-            using var decrypto = rijndaelProvider.CreateDecryptor();
+            using var aes = Aes.Create("AesManaged");
+            aes.Key = Encoding.UTF8.GetBytes(decryptKey);
+            aes.IV = Keys;
+            aes.Mode = mode;
+            using var decrypto = aes.CreateDecryptor();
             return new CryptoStream(fs, decrypto, CryptoStreamMode.Read);
         }
 
@@ -590,13 +556,11 @@ namespace Masuit.Tools.Security
         /// <returns>加密流</returns>
         public static CryptoStream AESDecryptStream(this FileStream fs, byte[] decryptKey, CipherMode mode = CipherMode.CBC)
         {
-            using var rijndaelProvider = new RijndaelManaged()
-            {
-                Key = decryptKey,
-                IV = Keys,
-                Mode = mode
-            };
-            using var decrypto = rijndaelProvider.CreateDecryptor();
+            using var aes = Aes.Create("AesManaged");
+            aes.Key = decryptKey;
+            aes.IV = Keys;
+            aes.Mode = mode;
+            using var decrypto = aes.CreateDecryptor();
             return new CryptoStream(fs, decrypto, CryptoStreamMode.Read);
         }
 
@@ -682,7 +646,7 @@ namespace Masuit.Tools.Security
         public static string SHA256(this string str)
         {
             byte[] sha256Data = Encoding.UTF8.GetBytes(str);
-            using var sha256 = new SHA256Managed();
+            using var sha256 = System.Security.Cryptography.SHA256.Create();
             byte[] result = sha256.ComputeHash(sha256Data);
             return Convert.ToBase64String(result); //返回长度为44字节的字符串
         }
@@ -783,7 +747,7 @@ namespace Masuit.Tools.Security
         public static string SHA256(this Stream stream)
         {
             using var fs = new BufferedStream(stream, 1048576);
-            SHA256Managed sha = new SHA256Managed();
+            using var sha = System.Security.Cryptography.SHA256.Create();
             byte[] checksum = sha.ComputeHash(fs);
             return BitConverter.ToString(checksum).Replace("-", string.Empty);
         }
@@ -832,15 +796,15 @@ namespace Masuit.Tools.Security
     /// <summary>
     ///     RC2加密解密算法
     /// </summary>
-    public static class RC2
+    public static class RC2Crypt
     {
         private static ASCIIEncoding _asciiEncoding;
         private static byte[] _iv;
         private static byte[] _key;
-        private static RC2CryptoServiceProvider _rc2Csp;
+        private static RC2 _rc2Csp;
         private static UnicodeEncoding _textConverter;
 
-        static RC2()
+        static RC2Crypt()
         {
             InitializeComponent();
         }
@@ -879,7 +843,7 @@ namespace Masuit.Tools.Security
             };
             _asciiEncoding = new ASCIIEncoding();
             _textConverter = new UnicodeEncoding();
-            _rc2Csp = new RC2CryptoServiceProvider();
+            _rc2Csp = RC2.Create();
         }
 
         #region 将文本数据加密后写入一个文件
@@ -909,10 +873,10 @@ namespace Masuit.Tools.Security
             tmpFileStream.Read(index, 0, 10261);
             tmpFileStream.Close();
             //定义基本的加密转换运算
-            using var Encryptor = _rc2Csp.CreateEncryptor(_key, _iv);
+            using var encryptor = _rc2Csp.CreateEncryptor(_key, _iv);
             var msEncrypt = new MemoryStream();
             //在此加密转换流中,加密将从csEncrypt,加密后,结果在msEncrypt流中。
-            using var csEncrypt = new CryptoStream(msEncrypt, Encryptor, CryptoStreamMode.Write);
+            using var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
             //将要加密的文本转换成UTF-16 编码,保存在tmp数组。
             var tmp = _textConverter.GetBytes(toEncryptText);
             //将tmp输入csEncrypt,将通过Encryptor来加密。
@@ -1217,102 +1181,4 @@ namespace Masuit.Tools.Security
 
         #endregion
     }
-
-    /// <summary>
-    ///     对称加密解密算法类
-    /// </summary>
-    public static class Rijndael
-    {
-        private static string _key;
-        private static SymmetricAlgorithm _mobjCryptoService;
-
-        /// <summary>
-        ///     对称加密类的构造函数
-        /// </summary>
-        public static void SymmetricMethod()
-        {
-            _mobjCryptoService = new RijndaelManaged();
-            _key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";
-        }
-
-        /// <summary>
-        ///     获得密钥
-        /// </summary>
-        /// <returns>密钥</returns>
-        private static byte[] GetLegalKey()
-        {
-            var sTemp = _key;
-            _mobjCryptoService.GenerateKey();
-            var bytTemp = _mobjCryptoService.Key;
-            var keyLength = bytTemp.Length;
-            if (sTemp.Length > keyLength)
-            {
-                sTemp = sTemp.Substring(0, keyLength);
-            }
-            else if (sTemp.Length < keyLength)
-            {
-                sTemp = sTemp.PadRight(keyLength, ' ');
-            }
-
-            return Encoding.ASCII.GetBytes(sTemp);
-        }
-
-        /// <summary>
-        ///     获得初始向量IV
-        /// </summary>
-        /// <returns>初试向量IV</returns>
-        private static byte[] GetLegalIV()
-        {
-            var sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUber57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";
-            _mobjCryptoService.GenerateIV();
-            var bytTemp = _mobjCryptoService.IV;
-            var ivLength = bytTemp.Length;
-            if (sTemp.Length > ivLength)
-            {
-                sTemp = sTemp.Substring(0, ivLength);
-            }
-            else if (sTemp.Length < ivLength)
-            {
-                sTemp = sTemp.PadRight(ivLength, ' ');
-            }
-
-            return Encoding.ASCII.GetBytes(sTemp);
-        }
-
-        /// <summary>
-        ///     加密方法
-        /// </summary>
-        /// <param name="source">待加密的串</param>
-        /// <returns>经过加密的串</returns>
-        public static string Encrypto(this string source)
-        {
-            var bytIn = Encoding.UTF8.GetBytes(source);
-            var ms = new MemoryStream();
-            _mobjCryptoService.Key = GetLegalKey();
-            _mobjCryptoService.IV = GetLegalIV();
-            using var encrypto = _mobjCryptoService.CreateEncryptor();
-            using var cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
-            cs.Write(bytIn, 0, bytIn.Length);
-            cs.FlushFinalBlock();
-            var bytOut = ms.ToArray();
-            return Convert.ToBase64String(bytOut);
-        }
-
-        /// <summary>
-        ///     解密方法
-        /// </summary>
-        /// <param name="source">待解密的串</param>
-        /// <returns>经过解密的串</returns>
-        public static string Decrypto(this string source)
-        {
-            var bytIn = Convert.FromBase64String(source);
-            var ms = new MemoryStream(bytIn, 0, bytIn.Length);
-            _mobjCryptoService.Key = GetLegalKey();
-            _mobjCryptoService.IV = GetLegalIV();
-            using var encrypto = _mobjCryptoService.CreateDecryptor();
-            using var cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
-            using var sr = new StreamReader(cs);
-            return sr.ReadToEnd();
-        }
-    }
 }

+ 1 - 1
Masuit.Tools.Abstractions/Security/HashEncode.cs

@@ -24,7 +24,7 @@ namespace Masuit.Tools.Security
         {
             var code = new UnicodeEncoding();
             byte[] message = code.GetBytes(security);
-            using var arithmetic = new SHA512Managed();
+            using var arithmetic = SHA512.Create();
             var value = arithmetic.ComputeHash(message);
             var sb = new StringBuilder();
             foreach (byte o in value)

+ 7 - 7
Masuit.Tools.Abstractions/Security/RSACrypt.cs

@@ -166,7 +166,7 @@ namespace Masuit.Tools.Security
         public static byte[] GetHashBytes(this string mStrSource)
         {
             //从字符串中取得Hash描述
-            using var md5 = HashAlgorithm.Create("MD5");
+            using var md5 = MD5.Create();
             var buffer = Encoding.UTF8.GetBytes(mStrSource);
             return md5.ComputeHash(buffer);
         }
@@ -179,9 +179,9 @@ namespace Masuit.Tools.Security
         public static string GetHashString(this string mStrSource)
         {
             //从字符串中取得Hash描述
-            using var md5 = HashAlgorithm.Create("MD5");
+            using var md5 = MD5.Create();
             var buffer = Encoding.UTF8.GetBytes(mStrSource);
-            var hashData = md5?.ComputeHash(buffer);
+            var hashData = md5.ComputeHash(buffer);
             return Convert.ToBase64String(hashData);
         }
 
@@ -193,8 +193,8 @@ namespace Masuit.Tools.Security
         public static byte[] GetHashBytes(this FileStream objFile)
         {
             //从文件中取得Hash描述
-            using var md5 = HashAlgorithm.Create("MD5");
-            return md5?.ComputeHash(objFile);
+            using var md5 = MD5.Create();
+            return md5.ComputeHash(objFile);
         }
 
         /// <summary>
@@ -205,8 +205,8 @@ namespace Masuit.Tools.Security
         public static string GetHashString(this FileStream objFile)
         {
             //从文件中取得Hash描述
-            using var md5 = HashAlgorithm.Create("MD5");
-            var hashData = md5?.ComputeHash(objFile);
+            using var md5 = MD5.Create();
+            var hashData = md5.ComputeHash(objFile);
             return Convert.ToBase64String(hashData);
         }