RSA 签名异常:java.security.InvalidKeyException: IOException : Detect premature EOF 已解决
程序员文章站
2022-04-15 20:52:24
我们直接点 —— 你参数里的私钥(privateKey)有问题!!请核实一下。...
原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重。
项目场景:
业务上使用 RSA + AES 混合加密,在本地测试 RSA 签名流程时,出现了标题中描述的错误。
全部的异常描述如下:
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : Detect premature EOF
附:我的签名生成方法,如下图所示 ↓↓↓(该异常就是这个 catch 块捕获的)
原因分析:
我们直接点 —— 你参数里的私钥(privateKey)有问题!!请核实一下。
- 原因一:RSA 秘钥用混了
作为【发送方】,RSA 签名用的一定是自己的私钥(privateKey),【接收方】解密我们的签名用公钥(publicKey)。
注意:这个使用方法刚好和 RSA 对 AES 的秘钥加密相反,AES 的秘钥是【发送方】用对方的公钥(publicKey)加密,【接收方】用自己的私钥(privateKey)解密。
如果你用混了,比如用公钥(publicKey)来做签名,一定会出现标题的错误。
- 原因二:你的 RSA 秘钥是自己定义的,或者复制过程中弄错了
不同于 AES 加密秘钥可以自己定义,RSA 的秘钥生成是遵循很多算法的,是个很复杂的过程(下图所示),生成的公钥(publicKey)和私钥(privateKey)必须是一对使用。
在强大的算法支持下,不要说自己定义,就是弄错一位都废了,也会出现标题的错误。
解决方案:
按照 RSA 规范进行签名和验签,并使用正确的,符合 RSA 规范的,用 RSA 方法生成的私钥(privateKey)。
没有正确的 RSA 秘钥??还没写好工具类??不用担心,都给你准备好了,所需Jar包也附在里面,拿去拿去 (*^▽^*)
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.security.KeyPairGenerator;
import org.apache.commons.codec.binary.Base64;
/**
* RSA:随机生成密钥对
*
* @throws NoSuchAlgorithmException
*/
public static void genKeyPair() throws NoSuchAlgorithmException {
// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
// 初始化密钥对生成器,密钥大小为96-2048位
keyPairGen.initialize(2048, new SecureRandom());
// 生成一个密钥对,保存在keyPair中
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // 得到私钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 得到公钥
// 得到公钥字符串
String publicKeyStr = new String(Base64.encodeBase64(publicKey.getEncoded()));
// 得到私钥字符串
String privateKeyStr = new String(Base64.encodeBase64((privateKey.getEncoded())));
System.out.println("随机生成的公钥为:" + publicKeyStr);
System.out.println("随机生成的私钥为:" + privateKeyStr);
}
我是 IT无知君,您的点赞、评论和关注,是我不懈创作的动力。
学无止境,气有浩然,让我们一起加油,天涯未远,江湖有缘再见!!
本文地址:https://blog.csdn.net/weixin_44259720/article/details/111040063