Browse Source

😁增加获取国密公钥私钥对接口

zuohuaijun 2 năm trước cách đây
mục cha
commit
b0cc3b8a8d

+ 20 - 0
Admin.NET/Admin.NET.Core/Service/Common/SysCommonService.cs

@@ -8,6 +8,8 @@
 // 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
 
 using Microsoft.AspNetCore.Mvc.ApiExplorer;
+using Org.BouncyCastle.Crypto.Parameters;
+using Org.BouncyCastle.Utilities.Encoders;
 using Swashbuckle.AspNetCore.SwaggerGen;
 
 namespace Admin.NET.Core.Service;
@@ -26,6 +28,24 @@ public class SysCommonService : IDynamicApiController, ITransient
         _apiProvider = apiProvider;
     }
 
+    /// <summary>
+    /// 获取国密公钥私钥对
+    /// </summary>
+    /// <returns></returns>
+    [DisplayName("获取国密公钥私钥对")]
+    public SmKeyPairOutput GetSmKeyPair()
+    {
+        var kp = GM.GenerateKeyPair();
+        var privateKey = Hex.ToHexString(((ECPrivateKeyParameters)kp.Private).D.ToByteArray()).ToUpper();
+        var publicKey = Hex.ToHexString(((ECPublicKeyParameters)kp.Public).Q.GetEncoded()).ToUpper();
+
+        return new SmKeyPairOutput
+        {
+            PrivateKey = privateKey,
+            PublicKey = publicKey,
+        };
+    }
+
     /// <summary>
     /// 获取所有接口/动态API
     /// </summary>

+ 4 - 3
Admin.NET/Admin.NET.Core/Util/GM/GM.cs

@@ -256,6 +256,7 @@ public class GM
         return new DerSequence(v).GetEncoded("DER");
     }
 
+    // 生成公私匙对
     public static AsymmetricCipherKeyPair GenerateKeyPair()
     {
         ECKeyPairGenerator kpGen = new();
@@ -335,7 +336,7 @@ public class GM
      *
      * @param Z
      * @param klen
-     *            生成klen字节数长度的密钥
+     * 生成klen字节数长度的密钥
      * @return
      */
 
@@ -441,7 +442,7 @@ public class GM
         Asn1OctetString pubKeyX509 = (Asn1OctetString)pubSeq[1];
         X509Certificate x509 = new X509CertificateParser().ReadCertificate(pubKeyX509.GetOctets());
         sm2Cert.publicKey = x509.GetPublicKey();
-        sm2Cert.certId = x509.SerialNumber.ToString(10); //这里转10进,有啥其他进制要求的自己改改
+        sm2Cert.certId = x509.SerialNumber.ToString(10); //这里转10进,有啥其他进制要求的自己改改
         return sm2Cert;
     }
 
@@ -457,7 +458,7 @@ public class GM
 
         X509Certificate x509 = new X509CertificateParser().ReadCertificate(cert);
         sm2Cert.publicKey = x509.GetPublicKey();
-        sm2Cert.certId = x509.SerialNumber.ToString(10); //这里转10进,有啥其他进制要求的自己改改
+        sm2Cert.certId = x509.SerialNumber.ToString(10); //这里转10进,有啥其他进制要求的自己改改
         return sm2Cert;
     }