Selaa lähdekoodia

真随机数用guid作为种子
加密增加byte类型重载

懒得勤快 4 vuotta sitten
vanhempi
sitoutus
ad0341d9fd

+ 3 - 4
Masuit.Tools.Abstractions/Extensions/BaseType/RandomExtensions.cs

@@ -1,5 +1,4 @@
 using System;
-using System.Diagnostics;
 
 namespace Masuit.Tools
 {
@@ -9,11 +8,11 @@ namespace Masuit.Tools
         /// 生成真正的随机数
         /// </summary>
         /// <param name="r"></param>
-        /// <param name="seed"></param>
+        /// <param name="maxValue"></param>
         /// <returns></returns>
-        public static int StrictNext(this Random r, int seed = int.MaxValue)
+        public static int StrictNext(this Random r, int maxValue = int.MaxValue)
         {
-            return new Random((int)Stopwatch.GetTimestamp()).Next(seed);
+            return new Random(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0)).Next(maxValue);
         }
 
         /// <summary>

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

@@ -360,6 +360,25 @@ namespace Masuit.Tools.Security
             return Convert.ToBase64String(encryptedData);
         }
 
+        /// <summary>
+        /// 对称加密算法AES RijndaelManaged加密(RijndaelManaged(AES)算法是块式加密算法)
+        /// </summary>
+        /// <param name="encryptString">待加密字符串</param>
+        /// <param name="encryptKey">加密密钥,须半角字符</param>
+        /// <returns>加密结果字符串</returns>
+        public static string AESEncrypt(this string encryptString, byte[] encryptKey)
+        {
+            using var rijndaelProvider = new RijndaelManaged
+            {
+                Key = encryptKey,
+                IV = Keys
+            };
+            using ICryptoTransform rijndaelEncrypt = rijndaelProvider.CreateEncryptor();
+            byte[] inputData = Encoding.UTF8.GetBytes(encryptString);
+            byte[] encryptedData = rijndaelEncrypt.TransformFinalBlock(inputData, 0, inputData.Length);
+            return Convert.ToBase64String(encryptedData);
+        }
+
         /// <summary>
         /// 对称加密算法AES RijndaelManaged解密字符串
         /// </summary>
@@ -398,6 +417,32 @@ namespace Masuit.Tools.Security
             }
         }
 
+        /// <summary>
+        /// 对称加密算法AES RijndaelManaged解密字符串
+        /// </summary>
+        /// <param name="decryptString">待解密的字符串</param>
+        /// <param name="decryptKey">解密密钥,和加密密钥相同</param>
+        /// <returns>解密成功返回解密后的字符串,失败返回空</returns>
+        public static string AESDecrypt(this string decryptString, byte[] decryptKey)
+        {
+            try
+            {
+                using var rijndaelProvider = new RijndaelManaged()
+                {
+                    Key = decryptKey,
+                    IV = Keys
+                };
+                using ICryptoTransform rijndaelDecrypt = rijndaelProvider.CreateDecryptor();
+                byte[] inputData = Convert.FromBase64String(decryptString);
+                byte[] decryptedData = rijndaelDecrypt.TransformFinalBlock(inputData, 0, inputData.Length);
+                return Encoding.UTF8.GetString(decryptedData);
+            }
+            catch
+            {
+                return string.Empty;
+            }
+        }
+
         /// <summary>
         /// 按字节长度(按字节,一个汉字为2个字节)取得某字符串的一部分
         /// </summary>
@@ -513,6 +558,23 @@ namespace Masuit.Tools.Security
             return new CryptoStream(fs, encrypto, CryptoStreamMode.Write);
         }
 
+        /// <summary>
+        /// 加密文件流
+        /// </summary>
+        /// <param name="fs">需要加密的文件流</param>
+        /// <param name="decryptKey">加密密钥</param>
+        /// <returns>加密流</returns>
+        public static CryptoStream AESEncryptStrream(this FileStream fs, byte[] decryptKey)
+        {
+            using var rijndaelProvider = new RijndaelManaged()
+            {
+                Key = decryptKey,
+                IV = Keys
+            };
+            using var encrypto = rijndaelProvider.CreateEncryptor();
+            return new CryptoStream(fs, encrypto, CryptoStreamMode.Write);
+        }
+
         /// <summary>
         /// 解密文件流
         /// </summary>
@@ -532,6 +594,23 @@ namespace Masuit.Tools.Security
             return new CryptoStream(fs, decrypto, CryptoStreamMode.Read);
         }
 
+        /// <summary>
+        /// 解密文件流
+        /// </summary>
+        /// <param name="fs">需要解密的文件流</param>
+        /// <param name="decryptKey">解密密钥</param>
+        /// <returns>加密流</returns>
+        public static CryptoStream AESDecryptStream(this FileStream fs, byte[] decryptKey)
+        {
+            using var rijndaelProvider = new RijndaelManaged()
+            {
+                Key = decryptKey,
+                IV = Keys
+            };
+            using var decrypto = rijndaelProvider.CreateDecryptor();
+            return new CryptoStream(fs, decrypto, CryptoStreamMode.Read);
+        }
+
         /// <summary>
         /// 对指定文件AES加密
         /// </summary>

+ 1 - 1
Masuit.Tools.Core/AspNetCore/DbSetExtensions.cs

@@ -96,7 +96,7 @@ namespace Masuit.Tools.Core.AspNetCore
                     }
                 }
 
-                foreach (var idField in keyIgnoreFields.Where(p => p.GetSetMethod() != null && p.GetGetMethod() != null))
+                foreach (var idField in keyIgnoreFields.Where(p => p.SetMethod != null && p.GetMethod != null))
                 {
                     var existingValue = idField.GetValue(item);
                     if (idField.GetValue(entity) != existingValue)

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

@@ -54,7 +54,7 @@ github:https://github.com/ldqk/Masuit.Tools
         <PackageReference Include="System.Drawing.Common" Version="5.0.0" />
     </ItemGroup>
     <ItemGroup Condition=" '$(TargetFramework)' == 'net5'">
-        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.8" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.9" />
         <PackageReference Include="System.Diagnostics.PerformanceCounter" Version="5.0.1" />
         <PackageReference Include="System.Drawing.Common" Version="5.0.2" />
     </ItemGroup>