【问题标题】:Encrypted data length is very large with RSA使用 RSA 加密的数据长度非常大
【发布时间】:2012-06-08 20:05:19
【问题描述】:

我希望加密数据与我的原始文本具有相同的长度,因为我必须遵守长度的限制。我正在使用BouncyCastle

这是我生成密钥对的代码:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(512);
KeyPair keypair = keyGen.genKeyPair();
PublicKey pub = keypair.getPublic();
byte[] pubs = pub.getEncoded();

这是我要加密的代码:

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
PublicKey pk = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(pubs));
cipher.init(Cipher.ENCRYPT_MODE, pk);
byte[] cipherBytes = cipher.doFinal(plainArray);

编码后的数据很大,怎么做才能和原始数据一样小?

【问题讨论】:

    标签: java rsa bouncycastle


    【解决方案1】:

    没有,至少与 RSA 无关。 RSA 需要一定数量的填充以确保安全,并且由于任何压缩方法都会将数据视为随机数据,因此您也无法对其进行压缩。

    当然,您不应该直接使用 RSA 直接加密数据,而应该加密一个随机会话/数据密钥。但即便如此,您仍会将加密的会话密钥作为开销。

    您可以使用椭圆曲线密码术删除非对称加密数据/密钥的一些位(其输出是密钥大小最小值的两倍,但密钥大小要小得多以实现相同的安全级别)。不过 EC 密码学并不适合温顺,它有很多复杂性。

    顺便说一句,512 位 RSA 被认为是不安全的。至少使用 1024 或遵守http://www.keylength.com/ 中列出的 ECRYPT II 或 NIST 建议。

    【讨论】:

    • 我一直给你带来好消息,不是吗 - 很抱歉,当然欢迎你。
    • hhh 不,它们对我来说是个坏消息,但它们是个好消息;)
    【解决方案2】:

    如果您可以保密密钥,则可以使用 AES 等对称密码系统。如果在 CFB 模式下使用,它可以适应任何位长度。 IE。 #bits 输入和输出是相同的。

    RSA 和 ElGamal(主要的公钥密码系统)即使在您选择的 512 位时也可以在几小时内破解。 1024 - 4096 位是正常的。除非您的对手仅限于使用 1990 年代的硬件,否则少于 512 位是毫无价值的。 :-)

    【讨论】:

    • 是的,我使用的是 AES,但在我的情况下它不是很安全,因为密钥非常弱(只有 4 位数字)。还是谢谢。
    • AES 密钥通常是作为加密数据的一部分随机生成的。我记得,使用 AES-128 与 3072 位 RSA 密钥大致相同。如果您使用 bouncycastle 提供的设施(我忘记了名称,但请查看 PGPDataEncryptorBuilder),它应该为您完成大部分工作。
    【解决方案3】:

    RSA 的本质是在加密和解密中使用幂运算。

    基本上,对于公钥 e 和私钥 d,你需要一个消息 m 然后你得到压缩消息等于 c=m^e 并通过 n 对其进行修改。然后你用 m=c^d 解密并再次用 n 修改它(mod 表示取余数)。

    如果你仔细想想,关于某事力量的信息会产生更大的数字。因为你做了一个 n 模组,所以你最终得到的数字最多为 n-1n 是密钥长度。

    所以基本上,无论你接收什么消息,你都会加密到像 n 这样大的东西。消息必须小于 n

    但是必须使用填充方案将消息转换为整数(以便您可以进行幂运算)。这种填充方案可能需要少于 n 位。因此,您最终会得到比被加密数据大小更大的文件。此外,最后一个块可能小于 n 位,但会加密为 n 大小。

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多