问题遇到的现象和发生背景
使用java中Signature相关api进行验签,非对称加密算法使用的SHA256WithRSA/PSS,签名的流程为 原文经SHA256摘要算法生成摘要,摘要通过私钥加签生成签名,使用原文和签名可以进行验签,但是签名生成方只会传过来摘要和签名,如果继续使用Signature类的signature.verify(sign)就没法验证了,请问我应该如何验签呢
问题相关代码,请勿粘贴截图
public static boolean verify(String publicKeyBase64Str, byte[] source, byte[] sign) throws GeneralSecurityException {
// 加载公钥
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec pkcs8KeySpec = new X509EncodedKeySpec(cn.hutool.core.codec.Base64.decode(publicKeyBase64Str));
PublicKey publicKey = keyFactory.generatePublic(pkcs8KeySpec);
// 初始化
Security.addProvider(new BouncyCastleProvider());
/* MessageDigest digest = MessageDigest.getInstance("SHA256");
// 计算消息摘要
byte[] digestByte = digest.digest(source);*/
Signature signature = Signature.getInstance("SHA256withRSA/PSS");
signature.setParameter(new PSSParameterSpec(DIGEST, "MGF1", MGF1ParameterSpec.SHA256, 32, 1));
signature.initVerify(publicKey);
// 加载原始数据
signature.update(source);
// 验签
return signature.verify(sign);
}
运行结果及报错内容
使用signature.verify()验签需要用到原文和签名,但是现在只有摘要和签名,应该如何验签呢
我的解答思路和尝试过的方法
我想要达到的结果
使用摘要和签名可以进行验签