项目: JAVA生成的RSA的密文,通过C++来解密。
RSA这里就不多介绍了大家自己去看。
JAVA也是通过包来实现加密和解密的,那么我的C++是通过OPENSSL的库来实现的。
重点来到了:RSA使用过程
1、C++随机生成一对公钥和私钥
2、JAVA用公钥给明文打包形成密文
3、C++用私钥解密密文
这个是我整个项目的解决思路,其他项目是否这样,我不太清楚。但是JAVA和C++的私钥格式一定要搞清楚,他们不是一一对应的。
什么意思?
参考文档:http://www.jb51.net/article/98849.htm(非常重要的文档)
就是钥匙本身的格式也有很多种的~
密钥都对的情况下,还要注意一个编码模式问题:我采用的是RSA_PKCS1_PADDING
JAVA: cipher= Cipher.getInstance("RSA/ECB/PKCS1Padding");
C++:
if(RSA_private_decrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_de,p_rsa,RSA_PKCS1_PADDING)<0){
return NULL;
}
密钥和打包模式都一致的情况下,密文是什么,密文是一对看不懂的乱码,而JAVA通常会给再编码:base64编码。
通过BASE64解码后,再解密,一切问题解决。
其他参考文档: