Browse Source

[Security] 支持 GBK

Roc 5 years ago
parent
commit
a933876883

+ 4 - 0
src/Essensoft.AspNetCore.Payment.Security/Essensoft.AspNetCore.Payment.Security.csproj

@@ -6,4 +6,8 @@
     <PackageTags>Essensoft;Payment;Security</PackageTags>
   </PropertyGroup>
 
+  <ItemGroup>
+    <PackageReference Include="System.Text.Encoding.CodePages" Version="4.7.0" />
+  </ItemGroup>
+
 </Project>

+ 22 - 0
src/Essensoft.AspNetCore.Payment.Security/InternalEncoding.cs

@@ -0,0 +1,22 @@
+using System.Text;
+
+namespace Essensoft.AspNetCore.Payment.Security
+{
+    internal static class InternalEncoding
+    {
+        static InternalEncoding()
+        {
+            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+        }
+
+        internal static Encoding GetEncoding(string name)
+        {
+            return Encoding.GetEncoding(name);
+        }
+
+        internal static Encoding GetEncoding(int codepage)
+        {
+            return Encoding.GetEncoding(codepage);
+        }
+    }
+}

+ 2 - 2
src/Essensoft.AspNetCore.Payment.Security/SHA1WithRSA.cs

@@ -26,7 +26,7 @@ namespace Essensoft.AspNetCore.Payment.Security
             using (var rsa = RSA.Create())
             {
                 rsa.ImportRSAPrivateKey(Convert.FromBase64String(privateKey), out var _);
-                return Convert.ToBase64String(rsa.SignData(Encoding.GetEncoding(charset).GetBytes(data), HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1));
+                return Convert.ToBase64String(rsa.SignData(InternalEncoding.GetEncoding(charset).GetBytes(data), HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1));
             }
         }
 
@@ -55,7 +55,7 @@ namespace Essensoft.AspNetCore.Payment.Security
             using (var rsa = RSA.Create())
             {
                 rsa.ImportSubjectPublicKeyInfo(Convert.FromBase64String(publicKey), out var _);
-                return rsa.VerifyData(Encoding.GetEncoding(charset).GetBytes(data), Convert.FromBase64String(sign), HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
+                return rsa.VerifyData(InternalEncoding.GetEncoding(charset).GetBytes(data), Convert.FromBase64String(sign), HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
             }
         }
     }

+ 2 - 2
src/Essensoft.AspNetCore.Payment.Security/SHA256WithRSA.cs

@@ -26,7 +26,7 @@ namespace Essensoft.AspNetCore.Payment.Security
             using (var rsa = RSA.Create())
             {
                 rsa.ImportRSAPrivateKey(Convert.FromBase64String(privateKey), out var _);
-                return Convert.ToBase64String(rsa.SignData(Encoding.GetEncoding(charset).GetBytes(data), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1));
+                return Convert.ToBase64String(rsa.SignData(InternalEncoding.GetEncoding(charset).GetBytes(data), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1));
             }
         }
 
@@ -55,7 +55,7 @@ namespace Essensoft.AspNetCore.Payment.Security
             using (var rsa = RSA.Create())
             {
                 rsa.ImportSubjectPublicKeyInfo(Convert.FromBase64String(publicKey), out var _);
-                return rsa.VerifyData(Encoding.GetEncoding(charset).GetBytes(data), Convert.FromBase64String(sign), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+                return rsa.VerifyData(InternalEncoding.GetEncoding(charset).GetBytes(data), Convert.FromBase64String(sign), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
             }
         }
     }