孤港猫怨海 2021-12-31 14:13 采纳率: 0%
浏览 68

java中如何使用摘要和签名进行验签

问题遇到的现象和发生背景

使用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()验签需要用到原文和签名,但是现在只有摘要和签名,应该如何验签呢

我的解答思路和尝试过的方法
我想要达到的结果

使用摘要和签名可以进行验签

  • 写回答

1条回答 默认 最新

  • 心怀啊 2022-01-01 14:16
    关注

    去掉第12行再传摘要试试

    评论

报告相同问题?

问题事件

  • 创建了问题 12月31日

悬赏问题

  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项