Java到Python的RSA
我正在尝试在Java和Python之间加密一个字符串,客户端使用的是Bouncy Castle J2ME库,而另一端使用的是Python的M2Crypto库。
整体情况还不错,我可以正确解密,但填充方式成了问题。
M2Crypto库给我的填充方式(据我所知)只有这些:
- 无填充 = 3
- PKCS1填充 = 1
- SSLv23填充 = 2
- PKCS1 OAEP填充 = 4
而Bouncy Castle J2ME只提供:
- 无填充
- OAEP带填充
- PKCS5填充
- SSL3填充
所以,我可以在两者之间使用无填充,但这样解密后生成的字符串里充满了杂乱的字符。
我真的很想解决填充的问题,但我不知道如何在不同的填充方式之间转换,或者这是否可能。
请帮我想办法解决这个问题,真让我头疼!
2 个回答
2
Bouncy Castle 是一个提供加密功能的库,它可以为数据添加填充。如果你想用 PKCS1 填充来做 RSA 加密,你需要这样做:
public static PKCS1Encoding create_rsa_public(RSAKeyParameters PublicKey){
RSAEngine engine=new RSAEngine();
PKCS1Encoding encrypto=new PKCS1Encoding(engine);
encrypto.init(true,PublicKey);
return encrypto;
}
这个函数会给你返回一个带有 PKCS1 编码的 RSA 引擎。
1
我对Bouncy Castle不太熟悉,但我猜你可能在用RSAEngine
,这个东西实现了AsymmetricBlockCipher
,所以你应该可以使用PKCS1
,对吧?
另外,似乎还有OAEP
的支持,只要参数设置得当,这个也应该能用。