当前位置: 首页 > 知识库问答 >
问题:

哪些算法最可靠地解决替换密码?

赫连鸿振
2023-03-14

我正在研究一个问题,这个问题可以简化为对用已知语言编写的冗长的单字母替换密文的密码分析。这个问题很容易用频率分析和单词模式手工解决,就像辛科夫的《基本密码分析》中描述的那样。我很难找到一个理论上有效的算法: Joux的《算法密码分析》甚至没有涵盖这种基本的替换,我从盖恩斯的《密码分析:密码及其解决方案的研究》中一无所获(我还应该看到什么其他资源?)。

有些方法是显而易见的。确定每个替换顺序,然后利用已经知道的,只有在过程中没有出错的情况下才有效。使用元启发式优化——例如,重新分配字母,直到找到的有效单词数量最大化——使得很难判断搜索何时结束。也许测试变化的动态编程方法是最好的。或者,这个问题的答案包含其他可能幼稚的方法。

解决这类问题的首选算法是什么?

共有2个答案

濮阳立果
2023-03-14

本文描述了一种求解谐音替换密码的算法,其中长度为26(a-z)的字母是其特例。这里提供了它们的C参考实现。

算法背后的基本思想(爬山使用二进制频率,以避免不得不破译一次以上)来自这篇论文,并且(由第一篇论文的作者)被描述为解决单字母替代密码的最快已知算法。

戴树
2023-03-14

如果我们(不切实际地)假设给定语言中的每个字母都以某种已知的概率独立于附近的字母出现,那么精确的最大似然估计可以相当有效地找到。这是你对这个模型的最好期望。

假设信息中有n个字母,字母表中有k个字母。

基本思想是,我们以某种方式为每个k^2可能的字母对计算出一个数字分数,然后在两个字母表上寻找最大权重的二分完美匹配——也就是说,我们选择字母对的方式是,一个字母表中的每个字母都与另一个字母中的一个字母配对,并且所选字母对的分数之和最大化。主要有两个问题:(1)如何定义给定配对的分数;(2) 一旦我们决定了个人的分数,如何解决寻找对的最高和子集的一般问题。

将编码字母x与源字母y配对的分数应该是log(p(y)^freq(x)),其中p(y)是语言中字母y的已知概率,freq(x)是字母x在编码输入中出现的次数。为什么?因为在忽略附近字符影响的源语言的这种简单模型下,生成任何给定n个字符的源语言字符串的概率等于其中出现的字母的概率的乘积,你也可以将其计算为p(y)^freq(y)在源字母表中所有字母y上的乘积。因此,为了计算生成该字符串的概率,假设每个x都是“真正的”y(其他都不是y),我们将freq(y)改为freq(x)。如果我们接下来取日志,我们得到的是源字母表中所有字母y的log(p(y)^freq(x))之和——这个和正是最大二部完全匹配算法将最大化的。

有算法在O(V^2E)时间内解决密切相关的最大权重二部匹配问题,这里相当于O(k^4)时间。这个版本的问题看起来是最大化所有选择对的总和,同时遵守约束,即没有项目与另一组中的两个或更多其他项目匹配,但不要求每个项目都与其他项目匹配。幸运的是,我们可以把这个算法变成一个算法,通过向每个分数添加大量的M来非常简单地解决我们想要解决的“完美”变化:直观地说,这导致算法试图添加尽可能多的边(因为即使省略单个边也有很大的成本,使得这样的解决方案比包含全套k边的“愚蠢”解决方案糟糕得多),同时仍然迫使算法在所有k边解决方案中选择最好的(因为所有这些解决方案都包括来自添加权重的相同kM贡献)。

 类似资料:
  • 本文向大家介绍哪些是使用最广泛的密码算法?相关面试题,主要包含被问及哪些是使用最广泛的密码算法?时的应答技巧和注意事项,需要的朋友参考一下 回答:**下面列出了最常用的加密算法: Triple DES RSA Blowfish Twofish AES

  • GHC有很多可以执行的优化,但我不知道它们都是什么,也不知道它们在什么情况下执行的可能性有多大。 我的问题是:我可以期望它每次应用什么转换,或者几乎如此?如果我看一段经常执行(评估)的代码,我的第一个想法是“嗯,也许我应该优化它”,在这种情况下,我的第二个想法应该是“不要想它,GHC得到了这个”? 我在读《流融合:从列表到流再到什么都没有》这篇论文,他们使用的将列表处理改写成另一种形式的技术,GH

  • 本文向大家介绍html元素哪些标签是不可替换元素?哪些是可替换元素?相关面试题,主要包含被问及html元素哪些标签是不可替换元素?哪些是可替换元素?时的应答技巧和注意事项,需要的朋友参考一下 (replaced element)的展现效果不是由 CSS 来控制的。这些元素是一种外部对象,它们外观的渲染,是独立于 CSS 的。也就是说,css 可以影响元素但是不能影响其内容的显示。 可替换元素: …

  • 问题内容: 由于这个问题很受欢迎,因此我认为对其进行更新很有用。 让我强调AviD对这个问题给出 的正确答案 : 您不应在Cookie中存储任何需要加密的数据。 而是在cookie中存储一个大小合适的(128位/ 16字节)随机密钥,并在cookie的密钥中标识要在服务器上保持安全的信息。 我正在寻找有关“最佳”加密cookie加密算法的信息。 我有以下要求: 它必须快速 加密和解密(几乎)每个请

  • 本文向大家介绍解决过拟和的方法有哪些?相关面试题,主要包含被问及解决过拟和的方法有哪些?时的应答技巧和注意事项,需要的朋友参考一下 数据增强 正则化、dropout、bn 早停止 降维

  • 页替换算法 操作系统为何要进行页面置换呢?这是由于操作系统给用户态的应用程序提供了一个虚拟的“大容量”内存空间,而实际的物理内存空间又没有那么大。所以操作系统就就“瞒着”应用程序,只把应用程序中“常用”的数据和代码放在物理内存中,而不常用的数据和代码放在了硬盘这样的存储介质上。如果应用程序访问的是“常用”的数据和代码,那么操作系统已经放置在内存中了,不会出现什么问题。但当应用程序访问它认为应该在内