Java中的RSA加密/解密

Posted

技术标签:

【中文标题】Java中的RSA加密/解密【英文标题】:RSA Encrypt/Decrypt in Java 【发布时间】:2011-12-10 04:53:57 【问题描述】:

我是密码学的新手。我获得了一个 base64 格式的 RSA 公钥。有没有办法只使用公钥加密一些文本。我也需要模数/指数吗?

任何指针都会非常有帮助。谢谢

【问题讨论】:

我无法生成 RSA 公钥对象。据我所知,它需要模数和指数。 RSAPublicKeySpec(BigInteger 模数,BigInteger publicExponent)。我只有公钥文件。有没有办法只使用密钥文件来创建 RSAPublicKeySpec。我查看了 Bouncy Castle 图书馆,但找不到任何有用的东西。 【参考方案1】:

我也很感兴趣,我去“Google-ing”发现了这个有趣的页面。这是很多信息,但在我看来非常有趣。

http://www.di-mgt.com.au/rsa_alg.html

【讨论】:

【参考方案2】:

说它是 base64 格式是不够的。至少有两种常见的方式可以格式化 RSA 公钥,其中任何一种都可以进行 base64 编码。如果幸运的话,密钥是 X509EncodedKeySpec。如果是,则需要对其进行base64解码,创建KeyFactory,然后使用KeyFactory生成公钥。这里有一些未经测试,甚至没有编译的代码,希望能显示这些步骤。

// Example using the base64 class from http://iharder.sourceforge.net/current/java/base64/

byte [] x509Key = Base64.decode(base64Key);
KeyFactory kf = KeyFactory.getInstance("RSA");
RSAPublicKey rsaPub = (RSAPublicKey) kf.generatePublic();

如果您的 base64 键周围有 -----BEGIN 和 ----END 行,请删除它们。

【讨论】:

【参考方案3】:

公钥用于解密已被私钥加密的密文。

每个想要通信的用户都有一对加密密钥——一个公共加密密钥和一个私有解密密钥。

您可以使用公钥进行加密,因为密钥是通过数学方法推导出来的,但参数的选择使得从公钥中确定私钥的成本非常高。

【讨论】:

假设用户 A 生成密钥(公钥/私钥)并为用户 B 提供公钥。我认为用户 B 使用公钥加密。然后,用户 A 可以使用私钥/公钥对其进行解密。

以上是关于Java中的RSA加密/解密的主要内容,如果未能解决你的问题,请参考以下文章

java rsa私钥加密

java编写非对称加密,解密,公钥加密,私钥解密,RSA,rsa

java 中的Cipher类RSA方式能不能用私钥加密公钥解密,完整解释下

RSA:在 iOS 中加密,在 Java 中解密

JAVA如何对URL进行加密和解密啊

Java RSA解密