【问题标题】:Encrypt file by blocks按块加密文件
【发布时间】:2016-10-28 22:49:50
【问题描述】:

我有一个大文件,我正在尝试使用 RSA 加密。是的,我知道这种情况下通常使用混合加密,但我想使用标准的公钥加密来看看效率上的差异。

为了加密这么大的文件,我知道我必须逐块加密。收到后,提示我的字节数组太大而无法使用 RSA-2048 加密的错误,我将字节数组减少到 245 个字节。 246 字节的字节数组可以正常工作,但它也仅适用于 246 字节,这是我的问题。我需要用 RSA-2048 加密整个文件。

在研究了 RSA-2048 密码学以更好地理解和逐块加密之后,我仍然对使用 RSA-2048 实现逐块加密感到困惑。这是我第一次用任何语言实现密码学。下面是关于使用 RSA 公钥加密大文件的代码。

感谢任何关于如何使用 RSA 逐块加密整个大文件的建议。

【问题讨论】:

  • 不,不是“我知道在这种情况下通常使用混合加密”,但绝不是知识渊博的开发人员。对称和非对称加密各有其特点,使用它们就像不用 1000 辆微型汽车为摩天大楼提供混凝土一样。有一个问题,您为什么还要使用非对称加密 (RSA),您是否需要公钥和私钥对?最后,我当然希望这永远不会在生产代码中使用。

标签: java encryption cryptography rsa public-key-encryption


【解决方案1】:

首先,无论您说什么,您都不应该将 RSA 用作分组密码。如果你在生产代码中这样做并且有人发现了,你很可能会被解雇。

但是……

  • 您应该从 FileInputStream 中读取最多 ~246 个字节。
  • 使用 RSA 加密此结果。
  • 将加密块写入FileOutputStream

您的代码没有这样做是因为:

  • 你立即返回第一个密文块:

    inputfile= cipher.doFinal(block); return inputfile;

  • 您不会对结果做任何事情。

【讨论】:

  • 请看我的更新。我对我会返回什么感到困惑。
  • @SamHunt 我认为你应该从头开始,也许先了解 while 循环,文件 I/O。你的代码没有意义。你不应该返回那里,因为代码只循环一次?
  • 我阅读了有关 while 循环和文件 I/O 的信息。我正在自学,所以请先生,你能解释一下我会回到哪里。我为我的困惑道歉,但我已经花了很多时间努力工作。谢谢。
  • @SamHunt 循环结束后返回?我不太确定你的意思。看起来您无论如何都返回 null,所以只需将返回类型设为 void。
  • 先生,我采纳了您的一些建议,从头开始。请看我的更新。我知道在完成循环后我必须返回,但我不确定将返回放在哪里,因为如果我将“返回 null”更改为加密的字节数组,我会收到一个错误,因为字节数组不在该范围内。您能帮我正确返回值吗?我是新手,正在努力自学。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 2013-12-06
  • 2018-01-25
  • 1970-01-01
  • 2013-07-10
相关资源
最近更新 更多