TRX 1 anno fa
parent
commit
7188da1547

+ 11 - 5
PaymentServer/src/main/java/com/zhongshu/payment/server/core/utils/Test.java

@@ -3,9 +3,12 @@ package com.zhongshu.payment.server.core.utils;
 import com.zhongshu.payment.server.core.service.pay.impl.unionFrictionlessPay.config.UnionPaymentConfig;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.bouncycastle.crypto.engines.SM2Engine;
+import org.bouncycastle.crypto.params.ECDomainParameters;
 import org.bouncycastle.jce.ECNamedCurveTable;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
+import org.bouncycastle.jce.spec.ECPublicKeySpec;
 
 import java.security.*;
 import java.security.spec.X509EncodedKeySpec;
@@ -22,17 +25,17 @@ public class Test {
     @SneakyThrows
     public static void main(String[] args) {
         Security.addProvider(new BouncyCastleProvider());
-
+        
         // Generate key pair
         KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC");
         ECNamedCurveParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("sm2p256v1");
         keyPairGenerator.initialize(ecSpec);
         KeyPair keyPair = keyPairGenerator.generateKeyPair();
-        String pub1 = new String(keyPair.getPublic().getEncoded());
+        String pub1 = new String(keyPair.getPublic().getEncoded(), "utf-8");
         String publicKeyBase64 = Base64.getEncoder().encodeToString(pub1.getBytes());
         log.info("publicKeyBase64: {}", publicKeyBase64);
         PublicKey publicKey1 = keyPair.getPublic();
-        log.info("pub1: {}", keyPair.getPublic().getFormat());
+        log.info("pub1: {}", pub1);
 
 //        PublicKey publicKey = AesUtils.initializeSM3WithSM2PublicKey(UnionPaymentConfig.notifySecret);
 //        log.info("public: {} {}", publicKey, publicKeyBase64);
@@ -47,7 +50,7 @@ public class Test {
         signature.initSign(keyPair.getPrivate());
         signature.update("Hello, SM2".getBytes());
         byte[] sig = signature.sign();
-        log.info("sig: {}", new String(sig));
+        log.info("sig: {}", AesUtils.base64Encode(new String(sig)));
 
         // Verify
         signature.initVerify(keyPair.getPublic());
@@ -56,7 +59,10 @@ public class Test {
 
 
         String publicKeyString = "GAhPWQ8D4hXanneneaydaHYHiwn64p7y3A46Jpss87aKWsy5";
-        byte[] keyBytes = Base64.getDecoder().decode(publicKeyString);
+        byte[] keyBytes = Base64.getDecoder().decode(publicKeyBase64);
+
+
+        log.info("keyBytes: {}", new String(keyBytes, "UTF-8"));
         X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
         KeyFactory keyFactory = KeyFactory.getInstance("ECDSA", "BC");
         PublicKey publicKey = keyFactory.generatePublic(spec);

+ 77 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/utils/Test1.java

@@ -0,0 +1,77 @@
+package com.zhongshu.payment.server.core.utils;
+
+import cn.hutool.crypto.SmUtil;
+import cn.hutool.crypto.asymmetric.SM2;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.bouncycastle.asn1.gm.GMNamedCurves;
+import org.bouncycastle.asn1.x9.X9ECParameters;
+import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
+import org.bouncycastle.crypto.generators.ECKeyPairGenerator;
+import org.bouncycastle.crypto.params.ECDomainParameters;
+import org.bouncycastle.crypto.params.ECKeyGenerationParameters;
+import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
+import org.bouncycastle.crypto.params.ECPublicKeyParameters;
+import org.bouncycastle.jcajce.provider.digest.SM3;
+import org.bouncycastle.jce.ECNamedCurveTable;
+import org.bouncycastle.jce.interfaces.ECPrivateKey;
+import org.bouncycastle.jce.interfaces.ECPublicKey;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.jce.spec.ECParameterSpec;
+import org.bouncycastle.math.ec.ECPoint;
+import org.bouncycastle.util.encoders.Hex;
+
+import javax.crypto.spec.DESKeySpec;
+import java.math.BigInteger;
+import java.security.*;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.Base64;
+
+/**
+ * @author TRX
+ * @date 2024/9/2
+ */
+@Slf4j
+public class Test1 {
+
+    @SneakyThrows
+    public static void main(String[] args) {
+        Security.addProvider(new BouncyCastleProvider());
+        String publicKeyString = "GAhPWQ8D4hXanneneaydaHYHiwn64p7y3A46Jpss87aKWsy5";
+        String data = "hello word";
+
+        Security.addProvider(new BouncyCastleProvider());
+        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC");
+        ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("sm2p256v1");
+        keyPairGenerator.initialize(ecSpec, new SecureRandom());
+        KeyPair keyPair = keyPairGenerator.generateKeyPair();
+        ECPublicKey publicKey = (ECPublicKey) keyPair.getPublic();
+        ECPrivateKey privateKey = (ECPrivateKey) keyPair.getPrivate();
+        String base64Pub = Base64.getEncoder().encodeToString(publicKey.getEncoded());
+
+        log.info("pub: {} {}",base64Pub, new String(publicKey.getEncoded()));
+        log.info("pub: {}", Base64.getEncoder().encodeToString(privateKey.getEncoded()));
+
+        Signature sig = Signature.getInstance("SM3WithSM2", BouncyCastleProvider.PROVIDER_NAME);
+        sig.initSign(privateKey);
+        sig.update(data.getBytes());
+        byte[] signatureValue = sig.sign();
+
+        // 解码公钥字符串
+        byte[] publicKeyBytes = Base64.getDecoder().decode(base64Pub);
+        // 构造公钥对象
+        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
+        BouncyCastleProvider BC = new BouncyCastleProvider();
+        KeyFactory keyFactory = KeyFactory.getInstance("EC", BC);
+        PublicKey publicKey1 = keyFactory.generatePublic(keySpec);
+
+
+        Signature signature = Signature.getInstance("SM3withSM2", "BC");
+        signature.initVerify(publicKey1);
+        signature.update(data.getBytes());
+        boolean isValid = signature.verify(signatureValue);
+        log.info("isValid: {}", isValid);
+
+    }
+
+}

+ 9 - 0
PaymentServer/src/main/java/com/zhongshu/payment/server/core/utils/TestSM2.java

@@ -1,6 +1,7 @@
 package com.zhongshu.payment.server.core.utils;
 
 import cn.hutool.crypto.SmUtil;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.util.StopWatch;
@@ -20,6 +21,13 @@ public class TestSM2 {
         jsonObject.set("name", "zhongshu");
         jsonObject.set("age", 18);
         jsonObject.set("mid", "10037e6f803bc8ab01805fd07db4000d");
+
+        JSONArray array = new JSONArray();
+        JSONObject jsonObject1 = new JSONObject();
+        jsonObject1.set("pwd", "123abc");
+        array.add(jsonObject1);
+        jsonObject.set("list", array);
+
         pwd = jsonObject.toString();
         stopwatch.stop();
 
@@ -31,6 +39,7 @@ public class TestSM2 {
         String sm3 = SmUtil.sm3(publicKeyString);
 //        pubKey = sm3;
 
+
         System.out.println("公钥:" + pubKey);
         System.out.println("公钥base64:" + AesUtils.base64Encode(pubKey));
         String priKey = sm2Keys[1];