【问题标题】:Encrypt file using Hill Cipher and Java?使用 Hill Cipher 和 Java 加密文件?
【发布时间】:2013-04-14 07:08:22
【问题描述】:

众所周知,希尔密码是密码学中的经典密码,主要用于加密文本。我需要加密文件(例如 .doc、.ppt、.jpeg 等),而不仅仅是文件的内容。我已经在网上搜索过了,但是没有找到很多关于文件加密的研究。
我发现:加密 .txt 中的文本内容不会加密 .txt 文件。
使用 Java 或 .Net 或 Python(选择一个或一些),如何实现 Hill Cipher 来加密文件,如上所述?

请注意,这个问题不适用于我的家庭作业或作业。我只是对如何实现希尔密码来加密文件感到困惑和好奇。谢谢。

【问题讨论】:

  • 你的要求很奇怪。使用经典密码的全部意义不在于它不需要计算机吗?但是JPEG等总是需要一台计算机。那么为什么不使用现代密码呢?
  • 一看,这个想法就出现在我的脑海里。感谢您的建议。
  • erm ...你说你想加密一个文件,但不希望“只是内容”加密......基本上这就是所有密码所做的......没有“加密文件”……总是“只是内容”……有时文件会得到一个新的花哨的文件结尾,如 .enc 但这纯粹是装饰,即使该结尾与解密工具相关联,或者如果文件是嵌入在自解密二进制文件中......它只是加密内容......
  • 我明白了。假设有一个图像插入到一个名为 plaintext.doc 的单词 (.doc) 文件中。我们知道 Hill 密码仅用于消息(字母 A 到 Z)加密。然后,所有密码都会加密 .doc 文件中的内容/文本。那么,这意味着希尔密码无法加密plaintext.doc 还是有可能?请为我解释一下,这样我就清楚了。谢谢。

标签: file cryptography encryption


【解决方案1】:

Hill cipher 与前计算机时代的大多数经典密码一样,传统上仅用于加密字母:也就是说,有效输入仅包含从 AZ 的 26 个字母(以及,在某些变体中,可能需要一些额外的符号来使字母大小成为质数)。

也就是说,您没有理由不能使用 Hill 密码的变体,例如,字母大小为 256,允许您直接加密由任意字节组成的输入。

对于密钥,您需要一个模 256 可逆的随机矩阵,即一个由 0 到 255 的随机值组成的矩阵,其行列式为奇数。生成此类矩阵的一种简单方法是随机均匀地选取矩阵元素,计算行列式,如果恰好是偶数则重新开始。平均而言,您需要两次尝试才能成功。当然,为了解密,你还需要实际计算逆矩阵。

综上所述,值得注意的是,希尔密码本身就是very easybreak。事实上,甚至它的发明者 Lester S. Hill 也意识到了这一点,并且只推荐将其与替换密码结合使用,即我们今天可能认为的原语 substitution-permutation network

当然,现在我们可以使用更高效、更安全的密码,例如 AES。对于任何实用加密任务(而不仅仅是学习练习),您应该使用这些而不是尝试开发自己的。

【讨论】:

  • 从我在互联网上找到的一些参考资料来看,希尔密码是一种传统的对称密码,对吧?如果我错了,请纠正我!然后,当我有一个组合两种密码的想法时:Hill(对称)和 RSA(非对称),是否可以使用两种密码的组合来加密文件?如何?请给我解释。谢谢。
  • 您当然可以将 Hill 密码与 RSA 结合起来获得hybrid cryptosystem。基本上,您可以通过为希尔密码生成一个随机密钥,然后使用 RSA 加密该密钥并将其与消息一起发送来实现这一点。然而,这样一个系统的强度与其最弱的部分(在这种情况下为希尔密码)一样强,相差很大。
  • 感谢您的解释。但是,我对文件加密变得更加好奇和困惑。当我们加密一个文件时,比如说 word (.doc) 文件,我们应该加密文件的内容然后创建一个新的 .enc 文件吗?或者,我们是否应该将文件编码为二进制,然后对其进行加密并将其更改为新的 .enc 文件?哪种方法正确?
  • 我不确定您所说的“文件的内容”是什么意思,而不是“文件”。如果您的意思是 Word 文档中的文本,那么不,现代文件加密程序通常不会这样做;他们只是加密构成文件的原始字节,因为它存储在磁盘上。主要原因是加密程序通常不知道也不应该需要知道如何从Word文档中提取文本.只需加密原始字节就可以加密 any 文件。
  • 你愿意给我一个关于“加密原始字节”的例子吗?如果可用,我会更容易从代码示例(在 java、python 等中)中理解。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多