|
@@ -0,0 +1,74 @@
|
|
|
+package com.ueiibi.shop.util;
|
|
|
+
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
+import java.security.*;
|
|
|
+import java.time.Instant;
|
|
|
+import java.util.Base64;
|
|
|
+
|
|
|
+public class SignUtil {
|
|
|
+ public static String sign(String content, String privateKeyStr) throws Exception {
|
|
|
+ PrivateKey privateKey = PemUtil.loadPrivateKey(privateKeyStr);
|
|
|
+ Signature signature = Signature.getInstance("SHA256withRSA");
|
|
|
+ signature.initSign(privateKey);
|
|
|
+ signature.update(content.getBytes(StandardCharsets.UTF_8));
|
|
|
+ return Base64.getEncoder().encodeToString(signature.sign());
|
|
|
+ }
|
|
|
+ public static boolean verify(String content, String signBase64, String publicKeyStr) throws Exception {
|
|
|
+ PublicKey publicKey = PemUtil.loadPublicKey(publicKeyStr);
|
|
|
+ Signature signature = Signature.getInstance("SHA256withRSA");
|
|
|
+ signature.initVerify(publicKey);
|
|
|
+ signature.update(content.getBytes(StandardCharsets.UTF_8));
|
|
|
+ byte[] signBytes = Base64.getDecoder().decode(signBase64);
|
|
|
+ return signature.verify(signBytes);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) throws Exception {
|
|
|
+ Integer appId = 520980060;
|
|
|
+ String privateKey = "-----BEGIN PRIVATE KEY-----\n" +
|
|
|
+ "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCuUoNrJeK5mBjR\n" +
|
|
|
+ "/PVa212qis8v3t7D2UebdPsz1fSKZqg+418REr9wsBBRQPcU3CQglyM44YV8aGYt\n" +
|
|
|
+ "Aqz43jMw92Ofsv+V7ylbh+Sg4EFdCw+nEwm6aXYMYvNpHLgsYCfQluDTAnSRuuJK\n" +
|
|
|
+ "/z+DZL/J7TKUYb4gM+gy2ak2nFXsmXiSObM/HiPtnj3IQtdlCEK/kJ+BmdQDj4BH\n" +
|
|
|
+ "/JFjnYt50aXtupGza2jHs84BoJMFHu6Eq399BasXYroabsMUHQ1ln18LuJxm1mqh\n" +
|
|
|
+ "lKA/B5XnWMJ3NykG3qq6qxWwKJX7fTFLNDMD8lqjhnywb+2QHFp8UUfxLkbVEuEW\n" +
|
|
|
+ "JhcNJE/vAgMBAAECggEABCikyPwc5heaU/wocFP2bpikK7yx7NM0saE/UvPCQ0EC\n" +
|
|
|
+ "t4leHb6oQYx5vy6BFobP99UTOoqq0BZ/hYhgTwmiCAOG5Wr0TQPpJS1fR3VCKfGX\n" +
|
|
|
+ "HIHIRCG69r2vl+ze+fQLTx8iWvZeiJGAT5C6V6yiJLObds3EJumGGxx1PH/LTvsq\n" +
|
|
|
+ "Ng4liVuun4+GpF/vtltyip164Iy2xf7X7MhHV8uEL1gTVSuJURICi4ke0v1x6zrD\n" +
|
|
|
+ "I3idOt4OQTTG29WDcIGdMJMOtwVAX9KND2DPhAhQvd1aRjYyqdHEXAm8GohsCrdm\n" +
|
|
|
+ "39M00ZenNVUE32SJrN6BeoniNYFPMct4f//ygC2RMQKBgQDm9izoIxDpSW/1jnSn\n" +
|
|
|
+ "nNrA2fMu+SmCQ42Uc3q6K3O9BYo1mQ3w50DHPAWnSbWJnmdh7HGIXHxMv+37Fpz6\n" +
|
|
|
+ "pZ/N6nLx3yCJlyBaVZ8n9OL0IAaVSJfvfmOK0qcQEP6QC87iJJ4XJUOA2/Cy7FX3\n" +
|
|
|
+ "667e/cVdkBW22F0Q1zCjjXq4nwKBgQDBOHC9HAQQHL9Rfjvf/qzo9T+J6DV8SXGu\n" +
|
|
|
+ "+1xoHOynlwe3g+7xa21qhewl4bVYs85+ZLC46SW3NPwQC7Meooxcg2bVIh7YQ5Dq\n" +
|
|
|
+ "PWhY9cPmw3Uxbb8XeS7gaLI2iORXdCbio5XCAx5jEvKsorbOhlpEt7ZyN0IzS8Rr\n" +
|
|
|
+ "Y87PQHMWsQKBgEs4Iaf4w6k2oZ/3pUZxb00frnO98ibamWGfuninbipBg6GxFzk+\n" +
|
|
|
+ "F3rLsYuqFdWcIU9jEha3CER2varo0ndPOZx2nrjnUlF9Rqwk9pCs0L1xMLOt0M3O\n" +
|
|
|
+ "+9xafs5cuotvTRGZm2MuX62388xR7C2yNGGrhHvUUT4beTPi4ZRin3VBAoGAM9AU\n" +
|
|
|
+ "u0FV/ZQX4Zx+JdS/PUD2pt5z6T4wlAGnh+upsk8XrKheXLK4BoafCpF59a1RxCbw\n" +
|
|
|
+ "FMXAbV5x8UOR5rcj+HLsEl8x8kA8DfQllSViQPFM7dJGGd9PKLIqh+ExihoFi2Te\n" +
|
|
|
+ "dcYsUdj05kJDzyHL9v1kmUAkKmk45KtA++aGdiECgYEA5P8m6WC5F/n1EC2Bbqjw\n" +
|
|
|
+ "3BWisqi2nU/IFQoctOwquKbQFAIiGakiBhUzn20d1lPBpzFH1JsTcAHXeAbQFBy9\n" +
|
|
|
+ "vdA+cN0y2S8J61kj/E/dRKiz/H07h7IyBBw2nUZr2r2Pwi0ca8haDdBbOi2/1+29\n" +
|
|
|
+ "auhwh4hJYO4RlbWFPMU8qeI=\n" +
|
|
|
+ "-----END PRIVATE KEY-----\n";
|
|
|
+ String publicKey = "-----BEGIN PUBLIC KEY-----\n" +
|
|
|
+ "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArlKDayXiuZgY0fz1Wttd\n" +
|
|
|
+ "qorPL97ew9lHm3T7M9X0imaoPuNfERK/cLAQUUD3FNwkIJcjOOGFfGhmLQKs+N4z\n" +
|
|
|
+ "MPdjn7L/le8pW4fkoOBBXQsPpxMJuml2DGLzaRy4LGAn0Jbg0wJ0kbriSv8/g2S/\n" +
|
|
|
+ "ye0ylGG+IDPoMtmpNpxV7Jl4kjmzPx4j7Z49yELXZQhCv5CfgZnUA4+AR/yRY52L\n" +
|
|
|
+ "edGl7bqRs2tox7POAaCTBR7uhKt/fQWrF2K6Gm7DFB0NZZ9fC7icZtZqoZSgPweV\n" +
|
|
|
+ "51jCdzcpBt6quqsVsCiV+30xSzQzA/Jao4Z8sG/tkBxafFFH8S5G1RLhFiYXDSRP\n" +
|
|
|
+ "7wIDAQAB\n" +
|
|
|
+ "-----END PUBLIC KEY-----\n";
|
|
|
+// String timestamp = String.valueOf(Instant.now().getEpochSecond());
|
|
|
+ String timestamp = String.valueOf(1746696859);
|
|
|
+ String raw = appId + timestamp;
|
|
|
+ String sign = SignUtil.sign(raw, privateKey);
|
|
|
+ System.out.printf("sign = %s\n", sign);
|
|
|
+ System.out.printf("raw = %s\n", raw);
|
|
|
+
|
|
|
+ Boolean res = SignUtil.verify(raw,sign,publicKey);
|
|
|
+ System.out.printf("res = %s\n", res);
|
|
|
+ }
|
|
|
+}
|