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

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 c51单片机控制步进电机
  • ¥20 Visual studio无法检测到设备
  • ¥15 为什么我通过html绘制的SVG折线图插入到word中坐标轴不显示出来
  • ¥30 vue 页面窗口放大或者缩小元素会变化
  • ¥15 questasim仿真报错
  • ¥15 寻找电脑攻防的导师,有问题请教一下。
  • ¥20 微信同是win11,我的电脑安装不了pageoffice,一直无法打开
  • ¥15 这个界面我通过postman请求不到,但是通过浏览器可以正常访问
  • ¥15 多目标优化算法在与其他算法数据对比结果判断
  • ¥15 CPTN和EAST,主干网络是VGG16,请问在ICDAR2015数据集上训练之后,CPTN和EAST模型的大小为多少