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,rsa