公司对接银行接口,加密部分采用银行提供的jar包,其中加密方法是RSA,公私钥是16进制,公钥加密私钥解密;结果加密之后解密失败,经过一番测试发现银行jar包代码有问题。
16进制密钥加解密可参考这位博主写的文章,很详细:
RSA 16进制加解密和签名_Braveyzx的博客-CSDN博客_16进制密文
16进制RSA加解密提取公钥有不同的方法,方法一核心代码如下:
RSAPublicKeySpec keySpec = null;
PublicKey publicKey = null;
BigInteger big = new BigInteger(pubKey, 16);
try
{
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
keySpec = new RSAPublicKeySpec(big, new BigInteger("10001", 16));
publicKey = keyFactory.generatePublic(keySpec);
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
用上面的方法提取公钥进行加密,则解密失败,后面替换成了别的公钥提取方法(前文链接中的就可以),测试后解密成功。
公钥提取示例
byte[] keyBytes = hexStrToBytes(pubKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
publicKey = keyFactory.generatePublic(keySpec);