lin2744 2023-12-17 00:32
浏览 3
已结题

签名生成算法base64格式问题


package crypto;

import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;

public class SignatureGenerator {

  private static final String PRIVATE_KEY_STRING =
    "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMoOSFnSHgJpz3AD" +
      "aJY+4R29ojGwEXN1n6Nl9MZvp7XWtPifh8cEfgm5hdL0U5j4POywtgKtVsHAdYXY" +
      "R6rLylWlxfMiStQTqHwrgJCBHEtj9E7wXMpEPJtPSUZT1pvPq/hlgTkGrYayqUvf" +
      "P/dBsXd0Rf26cCefhnevgdHvWzqIvW5uFSbLAgMBAAECgYBwRDdYML5NPS0i7E7vH" +
      "ldHMEKwXMxI10eTr7ZiHRH2cl2f2+I8f+Zv5C97wvMf56VU1BDLamgAeW9B4v7hY" +
      "h64N7Xne9J2dNg/kJyH3szK4eM3Wg79y5yVmumA4T2bXenRoVblHvByb8x2SfxAu" +
      "XDA+1mQLkqSR8CEaRgntQQJBAPv5VlLQaduzhIeAShMyucI2J6NZ8KTFNt2HQ+h4" +
      "b1aayquHmPtNxIZHfFVch1JehwZB40Vw6FVV5aIb+7MCQQDSXW+Q0T6f7Lw+DjFj" +
      "NXSmLkCBDEYTrRlmvmBj4T69jsG7VQ6VTepfAmd2NhVqI4eOZICAVc2Pv0nWFOv8" +
      "1zvhAkAXCnR5uFop03ULmsVci1KnJlJ7x9pZlZ2VrBMKtpjTZZWXYjXGTn1F46LI" +
      "zTJYRVYQUhqZtVJH8AgnYpKS6VYxAkEApd5+zB9l9p4Bvbw72GbLjFu8v8Gjij2N" +
      "QSy61dMj/1g5T6yI2F3RhjQ+pp/UK5UDkAz+IDNr4XXqPfMshXdOEQJBAI6T0JOx" +
      "BpAF8XUd6Zrx5dfLsATkRwRHHrBRoN0gJESqjtP5kqNMc7MRdBJWGgWp9Kne03HO" +
      "ugvRCaZ/g9DlKjA=";

  private static PrivateKey privateKey;

  static {
    try {
      KeyFactory keyFactory = KeyFactory.getInstance("RSA");
      String cleanPrivateKeyString = PRIVATE_KEY_STRING.replaceAll("\\s", "");
      byte[] privateKeyBytes = Base64.getDecoder().decode(cleanPrivateKeyString);
      PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
      privateKey = keyFactory.generatePrivate(keySpec);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static String generateSignature(String data) {
    try {
      Signature signature = Signature.getInstance("SHA256withRSA");
      signature.initSign(privateKey);
      signature.update(data.getBytes());
      byte[] signedBytes = signature.sign();

      return Base64.getEncoder().encodeToString(signedBytes);
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
  }
}

这是一个签名算法接到可视页面上,但是一直报错显示不符合格式,问了gpt修改也一直弹这条报错”java.lang.IllegalArgumentException: Input byte array has wrong 4-byte ending unit“,麻烦各位大牛帮忙看看应该如何修改

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月25日
    • 创建了问题 12月17日

    悬赏问题

    • ¥15 内网办公电脑进行向日葵
    • ¥15 如何输入双曲线的参数a然后画出双曲线?我输入处理函数加上后就没有用了,不知道怎么回事去掉后双曲线可以画出来
    • ¥50 WPF Lidgren.Network.Core2连接问题
    • ¥15 soildworks装配体的尺寸问题
    • ¥100 有偿寻云闪付SDK转URL技术
    • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
    • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
    • ¥15 远程安装一下vasp
    • ¥15 自己做的代码上传图片时,报错
    • ¥15 Lingo线性规划模型怎么搭建