Java到Python的RSA

3 投票
2 回答
2031 浏览
提问于 2025-04-15 16:19

我正在尝试在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的支持,只要参数设置得当,这个也应该能用。

撰写回答