懒得勤快 %!s(int64=2) %!d(string=hai) anos
pai
achega
cc0aa851d2

+ 40 - 1
Masuit.Tools.Abstractions/Extensions/BaseType/ObjectExtensions.cs

@@ -3,6 +3,7 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Reflection;
+using Newtonsoft.Json.Linq;
 
 namespace Masuit.Tools
 {
@@ -165,11 +166,49 @@ namespace Masuit.Tools
         /// <typeparam name="T2"></typeparam>
         /// <param name="source"></param>
         /// <param name="action"></param>
-        /// <returns></returns>
         public static T2 Next<T1, T2>(this T1 source, Func<T1, T2> action)
         {
             return action(source);
         }
+
+        /// <summary>
+        /// 将对象转换成字典
+        /// </summary>
+        /// <param name="value"></param>
+        public static Dictionary<string, string> ToDictionary(this object value)
+        {
+            var dictionary = new Dictionary<string, string>();
+            if (value != null)
+            {
+                foreach (var property in value.GetType().GetProperties())
+                {
+                    var obj = property.GetValue(value, null) ?? string.Empty;
+                    dictionary.Add(property.Name, obj + string.Empty);
+                }
+            }
+
+            return dictionary;
+        }
+
+        /// <summary>
+        /// 将对象转换成字典
+        /// </summary>
+        /// <param name="value"></param>
+        public static Dictionary<string, string> ToDictionary(this JObject value)
+        {
+            var dictionary = new Dictionary<string, string>();
+            if (value != null)
+            {
+                var enumerator = value.GetEnumerator();
+                while (enumerator.MoveNext())
+                {
+                    var obj = enumerator.Current.Value ?? string.Empty;
+                    dictionary.Add(enumerator.Current.Key, obj + string.Empty);
+                }
+            }
+
+            return dictionary;
+        }
     }
 
     internal class ReferenceEqualityComparer : EqualityComparer<object>

+ 0 - 1
Masuit.Tools.Abstractions/Media/ImageWatermarker.cs

@@ -7,7 +7,6 @@ using SixLabors.ImageSharp.Processing.Processors.Transforms;
 using System;
 using System.IO;
 using SixLabors.ImageSharp.Formats;
-using SixLabors.ImageSharp.PixelFormats;
 
 namespace Masuit.Tools.Media
 {

+ 10 - 0
Masuit.Tools.Abstractions/Security/HashAlgorithm.cs

@@ -0,0 +1,10 @@
+namespace Masuit.Tools.Security;
+
+public enum HashAlgo : byte
+{
+    MD5,
+    SHA1,
+    SHA256,
+    SHA384,
+    SHA512
+}

+ 3 - 3
Masuit.Tools.Abstractions/Security/RSA.cs

@@ -156,16 +156,16 @@ namespace Masuit.Tools.Security
         /// </summary>
         public bool Verify(string hash, string sgin, string str)
         {
-            byte[] byts = null;
+            byte[] bytes = null;
             try
             {
-                byts = Convert.FromBase64String(sgin);
+                bytes = Convert.FromBase64String(sgin);
             }
             catch
             {
             }
 
-            return byts != null && Verify(hash, byts, Encoding.UTF8.GetBytes(str));
+            return bytes != null && Verify(hash, bytes, Encoding.UTF8.GetBytes(str));
         }
 
         /// <summary>

+ 21 - 14
Masuit.Tools.Abstractions/Security/RSACrypt.cs

@@ -219,13 +219,14 @@ namespace Masuit.Tools.Security
         /// </summary>
         /// <param name="data">签名字节数据</param>
         /// <param name="privateKey">私钥</param>
+        /// <param name="halg">hash算法</param>
         /// <returns>处理结果</returns>
         /// <exception cref="CryptographicException">The cryptographic service provider (CSP) cannot be acquired. </exception>
         /// <exception cref="CryptographicUnexpectedOperationException">The key is null.-or- The hash algorithm is null. </exception>
-        public static byte[] SignatureBytes(this byte[] data, string privateKey)
+        public static byte[] SignatureBytes(this byte[] data, string privateKey, HashAlgo halg = HashAlgo.MD5)
         {
             var rsa = new RSA(privateKey);
-            return rsa.Sign("MD5", data);
+            return rsa.Sign(halg.ToString(), data);
         }
 
         /// <summary>
@@ -246,13 +247,14 @@ namespace Masuit.Tools.Security
         /// </summary>
         /// <param name="value">签名字符串数据</param>
         /// <param name="privateKey">私钥</param>
+        /// <param name="halg">hash算法</param>
         /// <returns>处理结果</returns>
         /// <exception cref="CryptographicException">The cryptographic service provider (CSP) cannot be acquired. </exception>
         /// <exception cref="CryptographicUnexpectedOperationException">The key is null.-or- The hash algorithm is null. </exception>
-        public static byte[] SignatureBytes(this string value, string privateKey)
+        public static byte[] SignatureBytes(this string value, string privateKey, HashAlgo halg = HashAlgo.MD5)
         {
             var rsa = new RSA(privateKey);
-            return Encoding.UTF32.GetBytes(rsa.Sign("MD5", value));
+            return Encoding.UTF32.GetBytes(rsa.Sign(halg.ToString(), value));
         }
 
         /// <summary>
@@ -260,13 +262,14 @@ namespace Masuit.Tools.Security
         /// </summary>
         /// <param name="value">签名字符串数据</param>
         /// <param name="privateKey">私钥</param>
+        /// <param name="halg">hash算法</param>
         /// <returns>处理结果</returns>
         /// <exception cref="CryptographicException">The cryptographic service provider (CSP) cannot be acquired. </exception>
         /// <exception cref="CryptographicUnexpectedOperationException">The key is null.-or- The hash algorithm is null. </exception>
-        public static string SignatureString(this string value, string privateKey)
+        public static string SignatureString(this string value, string privateKey, HashAlgo halg = HashAlgo.MD5)
         {
             var rsa = new RSA(privateKey);
-            return rsa.Sign("MD5", value);
+            return rsa.Sign(halg.ToString(), value);
         }
 
         #endregion RSA签名
@@ -279,13 +282,14 @@ namespace Masuit.Tools.Security
         /// <param name="data">反格式化字节数据</param>
         /// <param name="publicKey">公钥</param>
         /// <param name="sign">哈希字节数据</param>
+        /// <param name="halg">hash算法</param>
         /// <returns>处理结果</returns>
         /// <exception cref="CryptographicException">The cryptographic service provider (CSP) cannot be acquired. </exception>
         /// <exception cref="CryptographicUnexpectedOperationException">The key is null.-or- The hash algorithm is null. </exception>
-        public static bool SignatureDeformatter(this byte[] data, string publicKey, byte[] sign)
+        public static bool SignatureDeformatter(this byte[] data, string publicKey, byte[] sign, HashAlgo halg = HashAlgo.MD5)
         {
             var rsa = new RSA(publicKey);
-            return rsa.Verify("MD5", sign, data);
+            return rsa.Verify(halg.ToString(), sign, data);
         }
 
         /// <summary>
@@ -294,13 +298,14 @@ namespace Masuit.Tools.Security
         /// <param name="data">反格式化字节数据</param>
         /// <param name="publicKey">公钥</param>
         /// <param name="sign">哈希字符串数据</param>
+        /// <param name="halg">hash算法</param>
         /// <returns>处理结果</returns>
         /// <exception cref="CryptographicException">The cryptographic service provider (CSP) cannot be acquired. </exception>
         /// <exception cref="CryptographicUnexpectedOperationException">The key is null.-or- The hash algorithm is null. </exception>
-        public static bool SignatureDeformatter(this byte[] data, string publicKey, string sign)
+        public static bool SignatureDeformatter(this byte[] data, string publicKey, string sign, HashAlgo halg = HashAlgo.MD5)
         {
             var rsa = new RSA(publicKey);
-            return rsa.Verify("MD5", Convert.FromBase64String(sign), data);
+            return rsa.Verify(halg.ToString(), Convert.FromBase64String(sign), data);
         }
 
         /// <summary>
@@ -309,13 +314,14 @@ namespace Masuit.Tools.Security
         /// <param name="value">反格式化字符串数据</param>
         /// <param name="publicKey">公钥</param>
         /// <param name="sign">哈希字节数据</param>
+        /// <param name="halg">hash算法</param>
         /// <returns>处理结果</returns>
         /// <exception cref="CryptographicException">The cryptographic service provider (CSP) cannot be acquired. </exception>
         /// <exception cref="CryptographicUnexpectedOperationException">The key is null.-or- The hash algorithm is null. </exception>
-        public static bool SignatureDeformatter(this string value, string publicKey, byte[] sign)
+        public static bool SignatureDeformatter(this string value, string publicKey, byte[] sign, HashAlgo halg = HashAlgo.MD5)
         {
             var rsa = new RSA(publicKey);
-            return rsa.Verify("MD5", sign, Convert.FromBase64String(value));
+            return rsa.Verify(halg.ToString(), sign, Convert.FromBase64String(value));
         }
 
         /// <summary>
@@ -324,13 +330,14 @@ namespace Masuit.Tools.Security
         /// <param name="value">格式字符串数据</param>
         /// <param name="publicKey">公钥</param>
         /// <param name="sign">哈希字符串数据</param>
+        /// <param name="halg">hash算法</param>
         /// <returns>处理结果</returns>
         /// <exception cref="CryptographicException">The cryptographic service provider (CSP) cannot be acquired. </exception>
         /// <exception cref="CryptographicUnexpectedOperationException">The key is null.-or- The hash algorithm is null. </exception>
-        public static bool SignatureDeformatter(this string value, string publicKey, string sign)
+        public static bool SignatureDeformatter(this string value, string publicKey, string sign, HashAlgo halg = HashAlgo.MD5)
         {
             var rsa = new RSA(publicKey);
-            return rsa.Verify("MD5", sign, value);
+            return rsa.Verify(halg.ToString(), sign, value);
         }
 
         #endregion RSA 签名验证

+ 7 - 1
Masuit.Tools.Abstractions/Security/RsaKey.cs

@@ -14,5 +14,11 @@
         /// 私钥
         /// </summary>
         public string PrivateKey { get; protected internal set; }
+
+        public void Deconstruct(out string publicKey, out string privateKey)
+        {
+            publicKey = PublicKey;
+            privateKey = PrivateKey;
+        }
     }
-}
+}

+ 0 - 1
Masuit.Tools.Abstractions/Strings/Template.cs

@@ -1,7 +1,6 @@
 using System;
 using System.Collections.Generic;
 using System.Text.RegularExpressions;
-using AngleSharp.Common;
 
 namespace Masuit.Tools.Strings
 {

+ 4 - 4
Masuit.Tools.Abstractions/Systems/PooledMemoryStream.cs

@@ -22,7 +22,7 @@ public sealed class PooledMemoryStream : Stream, IEnumerable<byte>
 
     private const float OverExpansionFactor = 2;
 
-    private byte[] _data = Array.Empty<byte>();
+    private byte[] _data = new byte[0];
     private int _length;
     private readonly ArrayPool<byte> _pool;
     private bool _isDisposed;
@@ -245,7 +245,7 @@ public sealed class PooledMemoryStream : Stream, IEnumerable<byte>
     }
 
     /// <summary>
-    /// 
+    ///
     /// </summary>
     /// <param name="disposing"></param>
     [MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -296,7 +296,7 @@ public sealed class PooledMemoryStream : Stream, IEnumerable<byte>
     }
 
     /// <summary>
-    /// 
+    ///
     /// </summary>
     /// <returns></returns>
     public IEnumerator<byte> GetEnumerator()
@@ -306,4 +306,4 @@ public sealed class PooledMemoryStream : Stream, IEnumerable<byte>
             yield return _data[i];
         }
     }
-}
+}

+ 2 - 26
Masuit.Tools.Net45/Masuit.Tools.Net45.csproj

@@ -184,32 +184,8 @@
     <Compile Include="..\Masuit.Tools.Abstractions\Reflection\*.*">
       <Link>Reflection\%(RecursiveDir)%(FileName)%(Extension)</Link>
     </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Security\Crc32.cs">
-      <Link>Security\Crc32.cs</Link>
-    </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Security\Crc64.cs">
-      <Link>Security\Crc64.cs</Link>
-    </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Security\Encrypt.cs">
-      <Link>Security\Encrypt.cs</Link>
-    </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Security\HashEncode.cs">
-      <Link>Security\HashEncode.cs</Link>
-    </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Security\RSA.cs">
-      <Link>Security\RSA.cs</Link>
-    </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Security\RSACrypt.cs">
-      <Link>Security\RSACrypt.cs</Link>
-    </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaKey.cs">
-      <Link>Security\RsaKey.cs</Link>
-    </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaKeyType.cs">
-      <Link>Security\RsaKeyType.cs</Link>
-    </Compile>
-    <Compile Include="..\Masuit.Tools.Abstractions\Security\RsaPem.cs">
-      <Link>Security\RsaPem.cs</Link>
+    <Compile Include="..\Masuit.Tools.Abstractions\Security\*.*">
+      <Link>Security\%(RecursiveDir)%(FileName)%(Extension)</Link>
     </Compile>
     <Compile Include="..\Masuit.Tools.Abstractions\Strings\NumberFormater.cs">
       <Link>Strings\NumberFormater.cs</Link>

+ 3 - 2
Masuit.Tools.Net45/Media/ImageWatermarker.cs

@@ -2,6 +2,7 @@
 using System.Drawing;
 using System.Drawing.Text;
 using System.IO;
+using Masuit.Tools.Systems;
 
 namespace Masuit.Tools.Media
 {
@@ -37,7 +38,7 @@ namespace Masuit.Tools.Media
         ///    由于抗锯齿质量就越好。
         ///    因为关闭了提示,词干宽度之间的差异可能非常明显。</param>
         /// <returns></returns>
-        public MemoryStream AddWatermark(string watermarkText, Color color, WatermarkPosition watermarkPosition = WatermarkPosition.BottomRight, int textPadding = 10, int fontSize = 20, Font font = null, bool textAntiAlias = true)
+        public PooledMemoryStream AddWatermark(string watermarkText, Color color, WatermarkPosition watermarkPosition = WatermarkPosition.BottomRight, int textPadding = 10, int fontSize = 20, Font font = null, bool textAntiAlias = true)
         {
             using var img = Image.FromStream(_stream);
             if (SkipWatermarkForSmallImages && (img.Height < Math.Sqrt(SmallImagePixelsThreshold) || img.Width < Math.Sqrt(SmallImagePixelsThreshold)))
@@ -90,7 +91,7 @@ namespace Masuit.Tools.Media
             }
 
             graphic.DrawString(watermarkText, f, brush, new Point(x, y));
-            var ms = new MemoryStream();
+            var ms = new PooledMemoryStream();
             img.Save(ms, img.RawFormat);
             ms.Position = 0;
             return ms;