Parcourir la source

增加AES参数

懒得勤快 il y a 4 ans
Parent
commit
86561a23fd

+ 32 - 3
Masuit.Tools.Abstractions/Extensions/BaseType/StringExtensions.cs

@@ -113,6 +113,36 @@ namespace Masuit.Tools
             return Regex.IsMatch(s, string.Join("|", keys.Select(Regex.Escape)));
         }
 
+        /// <summary>
+        /// 检测字符串中是否包含列表中的关键词
+        /// </summary>
+        /// <param name="s">源字符串</param>
+        /// <param name="regex">关键词列表</param>
+        /// <param name="ignoreCase">忽略大小写</param>
+        /// <returns></returns>
+        public static bool RegexMatch(this string s, string regex, bool ignoreCase = true)
+        {
+            if (string.IsNullOrEmpty(regex) || string.IsNullOrEmpty(s))
+            {
+                return false;
+            }
+
+            if (ignoreCase)
+            {
+                return Regex.IsMatch(s, regex, RegexOptions.IgnoreCase);
+            }
+
+            return Regex.IsMatch(s, regex);
+        }
+
+        /// <summary>
+        /// 检测字符串中是否包含列表中的关键词
+        /// </summary>
+        /// <param name="s">源字符串</param>
+        /// <param name="regex">关键词列表</param>
+        /// <returns></returns>
+        public static bool RegexMatch(this string s, Regex regex) => !string.IsNullOrEmpty(s) && regex.IsMatch(s);
+
         /// <summary>
         /// 判断是否包含符号
         /// </summary>
@@ -124,9 +154,8 @@ namespace Masuit.Tools
             return str switch
             {
                 null => false,
-                string a when string.IsNullOrEmpty(a) => false,
-                string a when a == string.Empty => false,
-                _ => symbols.Any(t => str.Contains(t))
+                "" => false,
+                _ => symbols.Any(str.Contains)
             };
         }
 

+ 4 - 4
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -4,7 +4,7 @@
     <LangVersion>latest</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.4.3.9</Version>
+    <Version>2.4.4</Version>
     <Authors>懒得勤快</Authors>
     <Description>Masuit.Tools基础公共库,包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。</Description>
     <Copyright>懒得勤快,长空X</Copyright>
@@ -17,9 +17,9 @@
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-    <FileVersion>2.4.3.9</FileVersion>
-    <Company>ldqk.org</Company>
-    <AssemblyVersion>2.4.3.9</AssemblyVersion>
+    <FileVersion>2.4.4</FileVersion>
+    <Company>masuit.com</Company>
+    <AssemblyVersion>2.4.4</AssemblyVersion>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
     <IncludeSymbols>true</IncludeSymbols>

+ 79 - 24
Masuit.Tools.Abstractions/Security/Encrypt.cs

@@ -333,10 +333,11 @@ namespace Masuit.Tools.Security
         /// 对称加密算法AES RijndaelManaged加密(RijndaelManaged(AES)算法是块式加密算法)
         /// </summary>
         /// <param name="encryptString">待加密字符串</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>加密结果字符串</returns>
-        public static string AESEncrypt(this string encryptString)
+        public static string AESEncrypt(this string encryptString, CipherMode mode = CipherMode.CBC)
         {
-            return AESEncrypt(encryptString, Default_AES_Key);
+            return AESEncrypt(encryptString, Default_AES_Key, mode);
         }
 
         /// <summary>
@@ -344,15 +345,17 @@ namespace Masuit.Tools.Security
         /// </summary>
         /// <param name="encryptString">待加密字符串</param>
         /// <param name="encryptKey">加密密钥,须半角字符</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>加密结果字符串</returns>
-        public static string AESEncrypt(this string encryptString, string encryptKey)
+        public static string AESEncrypt(this string encryptString, string encryptKey, CipherMode mode = CipherMode.CBC)
         {
             encryptKey = GetSubString(encryptKey, 32, "");
             encryptKey = encryptKey.PadRight(32, ' ');
             using var rijndaelProvider = new RijndaelManaged
             {
                 Key = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 32)),
-                IV = Keys
+                IV = Keys,
+                Mode = mode
             };
             using ICryptoTransform rijndaelEncrypt = rijndaelProvider.CreateEncryptor();
             byte[] inputData = Encoding.UTF8.GetBytes(encryptString);
@@ -360,18 +363,34 @@ namespace Masuit.Tools.Security
             return Convert.ToBase64String(encryptedData);
         }
 
+        /// <summary>
+        /// 对称加密算法AES RijndaelManaged加密(RijndaelManaged(AES)算法是块式加密算法)
+        /// </summary>
+        /// <param name="encryptString">待加密字符串</param>
+        /// <param name="options">加密选项</param>
+        /// <returns>加密结果字符串</returns>
+        public static string AESEncrypt(this string encryptString, RijndaelManaged options)
+        {
+            using ICryptoTransform rijndaelEncrypt = options.CreateEncryptor();
+            byte[] inputData = Encoding.UTF8.GetBytes(encryptString);
+            byte[] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 0, inputData.Length);
+            return Convert.ToBase64String(encryptedData);
+        }
+
         /// <summary>
         /// 对称加密算法AES RijndaelManaged加密(RijndaelManaged(AES)算法是块式加密算法)
         /// </summary>
         /// <param name="encryptString">待加密字符串</param>
         /// <param name="encryptKey">加密密钥,须半角字符</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>加密结果字符串</returns>
-        public static string AESEncrypt(this string encryptString, byte[] encryptKey)
+        public static string AESEncrypt(this string encryptString, byte[] encryptKey, CipherMode mode = CipherMode.CBC)
         {
             using var rijndaelProvider = new RijndaelManaged
             {
                 Key = encryptKey,
-                IV = Keys
+                IV = Keys,
+                Mode = mode
             };
             using ICryptoTransform rijndaelEncrypt = rijndaelProvider.CreateEncryptor();
             byte[] inputData = Encoding.UTF8.GetBytes(encryptString);
@@ -383,10 +402,11 @@ namespace Masuit.Tools.Security
         /// 对称加密算法AES RijndaelManaged解密字符串
         /// </summary>
         /// <param name="decryptString">待解密的字符串</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
-        public static string AESDecrypt(this string decryptString)
+        public static string AESDecrypt(this string decryptString, CipherMode mode = CipherMode.CBC)
         {
-            return AESDecrypt(decryptString, Default_AES_Key);
+            return AESDecrypt(decryptString, Default_AES_Key, mode);
         }
 
         /// <summary>
@@ -394,8 +414,9 @@ namespace Masuit.Tools.Security
         /// </summary>
         /// <param name="decryptString">待解密的字符串</param>
         /// <param name="decryptKey">解密密钥,和加密密钥相同</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>解密成功返回解密后的字符串,失败返回空</returns>
-        public static string AESDecrypt(this string decryptString, string decryptKey)
+        public static string AESDecrypt(this string decryptString, string decryptKey, CipherMode mode = CipherMode.CBC)
         {
             try
             {
@@ -404,7 +425,8 @@ namespace Masuit.Tools.Security
                 using var rijndaelProvider = new RijndaelManaged()
                 {
                     Key = Encoding.UTF8.GetBytes(decryptKey),
-                    IV = Keys
+                    IV = Keys,
+                    Mode = mode
                 };
                 using ICryptoTransform rijndaelDecrypt = rijndaelProvider.CreateDecryptor();
                 byte[] inputData = Convert.FromBase64String(decryptString);
@@ -417,20 +439,43 @@ namespace Masuit.Tools.Security
             }
         }
 
+        /// <summary>
+        /// 对称加密算法AES RijndaelManaged解密字符串
+        /// </summary>
+        /// <param name="decryptString">待解密的字符串</param>
+        /// <param name="options">加密选项</param>
+        /// <returns>解密成功返回解密后的字符串,失败返回空</returns>
+        public static string AESDecrypt(this string decryptString, RijndaelManaged options)
+        {
+            try
+            {
+                using ICryptoTransform rijndaelDecrypt = options.CreateDecryptor();
+                byte[] inputData = Convert.FromBase64String(decryptString);
+                byte[] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData, 0, inputData.Length);
+                return Encoding.UTF8.GetString(decryptedData);
+            }
+            catch
+            {
+                return string.Empty;
+            }
+        }
+
         /// <summary>
         /// 对称加密算法AES RijndaelManaged解密字符串
         /// </summary>
         /// <param name="decryptString">待解密的字符串</param>
         /// <param name="decryptKey">解密密钥,和加密密钥相同</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>解密成功返回解密后的字符串,失败返回空</returns>
-        public static string AESDecrypt(this string decryptString, byte[] decryptKey)
+        public static string AESDecrypt(this string decryptString, byte[] decryptKey, CipherMode mode = CipherMode.CBC)
         {
             try
             {
                 using var rijndaelProvider = new RijndaelManaged()
                 {
                     Key = decryptKey,
-                    IV = Keys
+                    IV = Keys,
+                    Mode = mode
                 };
                 using ICryptoTransform rijndaelDecrypt = rijndaelProvider.CreateDecryptor();
                 byte[] inputData = Convert.FromBase64String(decryptString);
@@ -544,15 +589,17 @@ namespace Masuit.Tools.Security
         /// </summary>
         /// <param name="fs">需要加密的文件流</param>
         /// <param name="decryptKey">加密密钥</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>加密流</returns>
-        public static CryptoStream AESEncryptStrream(this FileStream fs, string decryptKey)
+        public static CryptoStream AESEncryptStrream(this FileStream fs, string decryptKey, CipherMode mode = CipherMode.CBC)
         {
             decryptKey = GetSubString(decryptKey, 32, "");
             decryptKey = decryptKey.PadRight(32, ' ');
             using var rijndaelProvider = new RijndaelManaged()
             {
                 Key = Encoding.UTF8.GetBytes(decryptKey),
-                IV = Keys
+                IV = Keys,
+                Mode = mode
             };
             using var encrypto = rijndaelProvider.CreateEncryptor();
             return new CryptoStream(fs, encrypto, CryptoStreamMode.Write);
@@ -563,13 +610,15 @@ namespace Masuit.Tools.Security
         /// </summary>
         /// <param name="fs">需要加密的文件流</param>
         /// <param name="decryptKey">加密密钥</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>加密流</returns>
-        public static CryptoStream AESEncryptStrream(this FileStream fs, byte[] decryptKey)
+        public static CryptoStream AESEncryptStrream(this FileStream fs, byte[] decryptKey, CipherMode mode = CipherMode.CBC)
         {
             using var rijndaelProvider = new RijndaelManaged()
             {
                 Key = decryptKey,
-                IV = Keys
+                IV = Keys,
+                Mode = mode
             };
             using var encrypto = rijndaelProvider.CreateEncryptor();
             return new CryptoStream(fs, encrypto, CryptoStreamMode.Write);
@@ -580,15 +629,17 @@ namespace Masuit.Tools.Security
         /// </summary>
         /// <param name="fs">需要解密的文件流</param>
         /// <param name="decryptKey">解密密钥</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>加密流</returns>
-        public static CryptoStream AESDecryptStream(this FileStream fs, string decryptKey)
+        public static CryptoStream AESDecryptStream(this FileStream fs, string decryptKey, CipherMode mode = CipherMode.CBC)
         {
             decryptKey = GetSubString(decryptKey, 32, "");
             decryptKey = decryptKey.PadRight(32, ' ');
             using var rijndaelProvider = new RijndaelManaged()
             {
                 Key = Encoding.UTF8.GetBytes(decryptKey),
-                IV = Keys
+                IV = Keys,
+                Mode = mode
             };
             using var decrypto = rijndaelProvider.CreateDecryptor();
             return new CryptoStream(fs, decrypto, CryptoStreamMode.Read);
@@ -599,13 +650,15 @@ namespace Masuit.Tools.Security
         /// </summary>
         /// <param name="fs">需要解密的文件流</param>
         /// <param name="decryptKey">解密密钥</param>
+        /// <param name="mode">加密模式</param>
         /// <returns>加密流</returns>
-        public static CryptoStream AESDecryptStream(this FileStream fs, byte[] decryptKey)
+        public static CryptoStream AESDecryptStream(this FileStream fs, byte[] decryptKey, CipherMode mode = CipherMode.CBC)
         {
             using var rijndaelProvider = new RijndaelManaged()
             {
                 Key = decryptKey,
-                IV = Keys
+                IV = Keys,
+                Mode = mode
             };
             using var decrypto = rijndaelProvider.CreateDecryptor();
             return new CryptoStream(fs, decrypto, CryptoStreamMode.Read);
@@ -615,11 +668,12 @@ namespace Masuit.Tools.Security
         /// 对指定文件AES加密
         /// </summary>
         /// <param name="input">源文件流</param>
+        /// <param name="mode">加密模式</param>
         /// <param name="outputPath">输出文件路径</param>
-        public static void AESEncryptFile(this FileStream input, string outputPath)
+        public static void AESEncryptFile(this FileStream input, string outputPath, CipherMode mode = CipherMode.CBC)
         {
             using var fren = new FileStream(outputPath, FileMode.Create);
-            using var enfr = AESEncryptStrream(fren, Default_AES_Key);
+            using var enfr = AESEncryptStrream(fren, Default_AES_Key, mode);
             byte[] bytearrayinput = new byte[input.Length];
             input.Read(bytearrayinput, 0, bytearrayinput.Length);
             enfr.Write(bytearrayinput, 0, bytearrayinput.Length);
@@ -629,11 +683,12 @@ namespace Masuit.Tools.Security
         /// 对指定的文件AES解密
         /// </summary>
         /// <param name="input">源文件流</param>
+        /// <param name="mode">加密模式</param>
         /// <param name="outputPath">输出文件路径</param>
-        public static void AESDecryptFile(this FileStream input, string outputPath)
+        public static void AESDecryptFile(this FileStream input, string outputPath, CipherMode mode = CipherMode.CBC)
         {
             using FileStream frde = new FileStream(outputPath, FileMode.Create);
-            using CryptoStream defr = AESDecryptStream(input, Default_AES_Key);
+            using CryptoStream defr = AESDecryptStream(input, Default_AES_Key, mode);
             byte[] bytearrayoutput = new byte[1024];
             while (true)
             {

+ 4 - 4
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -18,10 +18,10 @@ github:https://github.com/ldqk/Masuit.Tools
         <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
         <RepositoryType>Github</RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-        <Version>2.4.3.9</Version>
-        <FileVersion>2.4.3.9</FileVersion>
-        <Company>ldqk.org</Company>
-        <AssemblyVersion>2.4.3.9</AssemblyVersion>
+        <Version>2.4.4</Version>
+        <FileVersion>2.4.4</FileVersion>
+        <Company>masuit.com</Company>
+        <AssemblyVersion>2.4.4</AssemblyVersion>
         <Authors>懒得勤快X</Authors>
         <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>

BIN
Masuit.Tools.Net45/Properties/AssemblyInfo.cs


+ 2 - 2
Masuit.Tools.Net45/package.nuspec

@@ -4,11 +4,11 @@
     <!--*-->
     <id>Masuit.Tools.Net45</id>
     <!--*-->
-    <version>2.4.3.9</version>
+    <version>2.4.4</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>懒得勤快</authors>
-    <owners>ldqk.org</owners>
+    <owners>masuit.com</owners>
     <licenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</licenseUrl>
     <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>
     <!--<iconUrl></iconUrl>-->

BIN
Masuit.Tools/Properties/AssemblyInfo.cs


+ 2 - 2
Masuit.Tools/package.nuspec

@@ -4,11 +4,11 @@
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <!--*-->
-    <version>2.4.3.9</version>
+    <version>2.4.4</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>懒得勤快</authors>
-    <owners>ldqk.org</owners>
+    <owners>masuit.com</owners>
     <licenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</licenseUrl>
     <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>
     <!--<iconUrl></iconUrl>-->