【问题标题】:How to encrypt large amounts of data using asymmetric cryptography?如何使用非对称密码术加密大量数据?
【发布时间】:2014-09-09 02:15:41
【问题描述】:

在我的应用程序的客户端,我想使用公钥加密文本(可以是任何大小)。之后,我将此数据包发送到服务器。在服务器端,我想使用我的私钥解密这个数据包。

我不能使用 RSA,因为数据包大小可以是任意大小,甚至比密钥还大。 我可以使用 OpenSSL 来做到这一点,使用加密/解密的结果创建文件和内容。

问题是:是否有另一种编程方式来做到这一点?

【问题讨论】:

  • 我很确定 OpenSSL 会将长文本分解为单独编码的数据包。你看过吗?
  • 嗨,马克。我可以使用 OpenSSL 做到这一点,问题是 OpenSSL 命令在此过程中创建文件。我现在要做的是在不创建这些输出文件的情况下做同样的事情。
  • 首先,不要重新发明加密货币;即使是专家也很难。其次,RSA 对它可以加密的有效负载中的密钥大小有硬性限制,使用大密钥的操作非常昂贵。这就是为什么实用的密码系统对有效载荷使用对称加密。

标签: java encryption cryptography public-key-encryption


【解决方案1】:

您需要实现hybrid encryption scheme。这种方案的一个例子是 OpenPGP。

在混合加密方案中,生成仅用于一条消息的对称会话密钥。对称密钥加密有效载荷,而接收者的公钥用于加密对称密钥。有效载荷通常由发送者的私钥签名。最后整批打包一起送出门。

我建议您使用类似BouncyCastle 的方式在 Java 中进行 OpenPGP 加密。无需重新发明轮子。

【讨论】:

    【解决方案2】:

    根据您喜欢处理 X.509 证书(它们可以是自签名的)还是 PGP 密钥,使用 PKCS#7/CMS 或 OpenPGP。两种技术都提供了可比较的安全级别,并且差异(在您的任务的情况下)主要在于密钥格式。

    BouncyCastle 或我们的 SecureBlackbox 是适用于这两种变体的广泛使用的库。

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多