在进行RSA2进行验签的时候,报了以下错误:

java.security.SignatureException: Signature length not correct: got 344 but was expecting 256
at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:189)
at java.security.Signature$Delegate.engineVerify(Signature.java:1192)
at java.security.Signature.verify(Signature.java:626)

翻译成中文的意思是:java.security.signatureException:签名长度不正确:得到344,但期望256

问题原因是:

  在生成签名的时候,用的是 Base64.encodeBase64String(signByte) 成签名字符串。

  1. /**
  2. * 生成签名字符串.
  3. * @param encryptStr
  4. * @return
  5. * @throws Exception
  6. */
  7. private static String generateSignByRsa(String encryptStr) throws Exception {
  8. if (logger.isInfoEnabled()) {
  9. logger.info("生成Rsa签名字符串...");
  10. }
  11.  
  12. // 用商户私钥生成签名字符串
  13. RsaEncrypt rsaEncrypt = new RsaEncrypt();
  14. rsaEncrypt.loadPrivateKey(MpayConfig.signMap.get(MpayConfig.PRIVATE_KEY));
  15. byte[] signByte = rsaEncrypt.sign(encryptStr, rsaEncrypt.getPrivateKey());
  16. String reqSign = Base64.encodeBase64String(signByte);
  17. logger.info("Rsa签名字符串:" + reqSign);
  18. return reqSign;
  19. }

  在验签的时候,直接getBytes方法返回字节数据,这样就导致签名字符串长度不一致了。

  1.   RsaEncrypt rsaEncrypt=new RsaEncrypt();
  2.   rsaEncrypt.loadPublicKey(publicKey);
  3.   return rsaEncrypt.verifySign(content,sign.getBytes(RsaEncrypt.ENCODING),rsaEncrypt.getPublicKey());

解决方案:

  正确的方式应该是,获取签名字符串字节数组时,跟签名时保持一样,用Base64Util.decode(sign)方法来获取

  1. RsaEncrypt rsaEncrypt=new RsaEncrypt();
  2. rsaEncrypt.loadPublicKey(publicKey);
  3. byte[] signByte = Base64Util.decode(sign);
  4. return rsaEncrypt.verifySign(content,signByte,rsaEncrypt.getPublicKey());

Rsa2验签报错【java.security.SignatureException: Signature length not correct】的解决办法的更多相关文章

  1. 抓取https网页时,报错sun.security.validator.ValidatorException: PKIX path building failed 解决办法

    抓取https网页时,报错sun.security.validator.ValidatorException: PKIX path building failed 解决办法 原因是https证书问题, ...

  2. 关于报错The specified child already has a parent的解决办法

    报错信息为:java.lang.IllegalStateException: The specified child already has a parent. You must call remov ...

  3. 开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法

    开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法: 创建存储过程时 出错信息: ERROR 1418 (HY ...

  4. VUE.JS 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法

    正常情况下在data里面都有做了定义 在函数里面进行赋值 这时候你运行时会发现,数据可以请求到,但是会报错 TypeError: Cannot set property 'listgroup' of ...

  5. composer 报错:Failed to decode response: zlib_decode(): data error 解决办法

    执行命令 composer require particle/validator 报错 Failed to decode response: zlib_decode(): data error 网上推 ...

  6. 服务器重启报错:提示fstab readonly报错!( /etc/fstab 只读无法修改的解决办法)

    摘自:http://blog.csdn.net/gray13/article/details/7432866 一.问题描述:服务器重启报错:提示fstab readonly报错! 二.问题原因:挂载的 ...

  7. VS 2015 报错 " 'unistd.h': No such file or directory" 的解决办法

    使用 Visual Studio 2015 进行程序开发工作时,如果编译的是来自于Linux平台的源文件,该源文件可能会包含头文件 uninstd.h,这样会产生报错信息: "fatal e ...

  8. Pycharm中不支持中文编码的解决方案。Pycharm中文报错。 Pycharm出现的部分快捷键无效及解决办法

    Pycharm中不支持中文编码的解决方案.Pycharm中文报错. 1. 打开Pycharm ---->  File ----> Default setting ------> Ed ...

  9. Atom | 报错 Cannot load the system dictionary for zh-CN的解决办法

    文章目录 问题描述 推荐阅读 查找问题所在 解决方案 (二选一) 问题描述 最近这款优秀的编辑器 atom,报错 Cannot load the system dictionary for zh-CN ...

随机推荐

  1. 【转载】redis优化配置和redis.conf说明

    转载地址:http://blog.csdn.net/luozhonghua2014/article/details/40568707?utm_source=tuicool&utm_medium ...

  2. UVa 11324 The Largest Clique (强连通分量+DP)

    题意:给定一个有向图,求一个最大的结点集,使得任意两个结点,要么 u 能到 v,要么 v 到u. 析:首先,如果是同一个连通分量,那么要么全选,要么全不选,然后我们就可以先把强连通分量先求出来,然后缩 ...

  3. 基于RFID恢复信号场

    学习RFID的核心是什么?难处在哪?:https://www.zhihu.com/question/26799106

  4. Python 3 Mysql 增删改查

    import pymysql import datainfo import time #获取参数 host = datainfo.host username = datainfo.username p ...

  5. android屏幕适配,生成不同分辨率的dimen.xml文件

    一.在项目下新建moudle,选择Java Library 二.DimenUtils类 public class DimenUtils { //文件保存的路径 是在该项目下根路径下创建 比如该项目创建 ...

  6. Replication--分区+复制

    1>配置订阅表使用分区,在发布的项目属性中设置"复制分区方案"和"复制索引分区方案"为true,然后初始化订阅 2>在发布数据库上修改发布属性 -- ...

  7. WPF成长之路------视频

    今天偶然看到一篇博文,发现WPF原来还可以直接播放视频!于是在这里记录一下,以后方便使用: <MediaElement Source="C:\WINDOWS\system32\oobe ...

  8. xmlns 与 targetNamespace 的解释

    test.xsd文件: <?xml version="1.0" encoding="UTF-8"?> <xs:schema elementFo ...

  9. 编写高质量JS代码中

    前段时间看了几道关于前端javascript的面试题目,方觉函数调用模式等基础的重要性.于是,下定决心,好好补补基础,即便不能深入语言的内部设计模式,也要对基本面向对象概念有比较深入的理解. 继续上一 ...

  10. 1. Python2 ,Python3区别

    Python2: 1. 源码都含有PHP,Java,C等语言的规范陋习. 2.重复代码比较多. Python3: 源码很规范,清晰,简单,符合Python的宗旨.