有没有关于Java中公钥加密的教程?

16

我已经能够找到有关对称加密和哈希的信息,但是我在寻找任何类型的Java公钥加密方面遇到了很多麻烦。我想做一个非常简单的概念验证程序,它可以接受一个字符串(或者一个文件),用公钥加密它,然后用私钥解密它。

如果有任何教程链接或示例,将不胜感激。我只是想制作一些演示如何在Java中使用公钥加密的东西。

2个回答

13

通常,使用公钥加密来加密对称密钥,部分原因是公钥加密非常缓慢。通常,您会向接收者发送以下内容,以便他们可以解密您的消息:

  1. 使用接收者的公钥加密的对称密钥。
  2. 用于算法的参数,通常是对称密码的初始化向量。
  3. 加密算法的标识符。
  4. 密文-实际上是在对称密码下加密的消息。

我在JCE文档中找到了示例代码,足以让事情运转起来。

捆绑所有这些信息的标准格式是Cryptographic Message Syntax(CMS),它被电子邮件应用程序中的S/MIME所使用。我建议使用Bouncy Castle库;它们很可靠、相当简单并且正在积极维护。参考文档有点薄弱,但他们提供了代码示例。


在已经Root的Android设备上,我们无法将密钥放在客户端。那么现在我们该怎么做才能在客户端解密在服务器端加密的文件呢?请参见我的相关问题:http://stackoverflow.com/questions/30951805/protected-document-viewer - Dr.jacky
@Mr.Hyde,您试图做的是不可能的。这正是人们越狱他们的设备的原因:禁用制造商试图保留在设备上的数字版权管理。您不能给某人一个秘密并仍然控制他们对其的使用。 - erickson
那么最接近最佳解决方案是什么?! 这样可以吗?:为服务器上的每个加密文件服务器生成私钥并将密钥和加密文件发送到客户端。 - Dr.jacky

12

根据您提供的示例,我遇到了以下错误:找不到支持RSA/NONE/PKCS1PADDING的任何提供程序。我想知道这台计算机上的Java副本是否没有实现它。 - Eugene M
3
请尝试使用RSA/ECB/PKCS1Padding。ECB是一种实际上没有块链接模式的加密方式。 - erickson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接