Encryption 英文文本中通常会出现哪些可打印的ASCII字符?

Encryption 英文文本中通常会出现哪些可打印的ASCII字符?,encryption,cryptography,Encryption,Cryptography,我一直在尝试解决一段时间,我遇到了麻烦,因为其中一些问题似乎比以前的问题更模糊 作为背景,问题是给定的文本文件是加密文本,ASCII码保存为数字。加密方法是将3个小写字母与明文循环异或(因此是可逆的)。该问题要求提供将文件解密为英文文本的密钥。我应该如何限制输出的字符集以获得答案,而不尝试筛选所有可能的明文(26^3) 我试着限制字母、空格和标点符号,但这不起作用 澄清一下:我想确定,在所有可打印的ASCII字符中,哪些可以丢弃,哪些可以在纯文本字符串中使用。在分析使用的算法时,您是否尝试过两种

我一直在尝试解决一段时间,我遇到了麻烦,因为其中一些问题似乎比以前的问题更模糊

作为背景,问题是给定的文本文件是加密文本,ASCII码保存为数字。加密方法是将3个小写字母与明文循环异或(因此是可逆的)。该问题要求提供将文件解密为英文文本的密钥。我应该如何限制输出的字符集以获得答案,而不尝试筛选所有可能的明文(26^3)

我试着限制字母、空格和标点符号,但这不起作用


澄清一下:我想确定,在所有可打印的ASCII字符中,哪些可以丢弃,哪些可以在纯文本字符串中使用。

在分析使用的算法时,您是否尝试过两种最“基本”和最常用的工具

  • 分析字符的频率,并尝试将其与英语字母频率匹配
  • brute强制使用单词列表中的键,最常用的词被“哑”用户用作键
  • 要分析此特定问题的频率,必须每三个元素拆分一次字符串,因为键的长度为3,现在应该能够生成三列:

    79  59  12
    2   79  35
    8   28  20
    2   3   68
    ...
    
    您必须分析每个列的频率,因为现在它们独立于键

    好的,实际上我花了我的时间构建了3个完整的列,计算了每个列的频率,得到了两个最频繁的项或每个列:

    Col1  Col2  Col3
    71    79    68
    2     1     1
    
    现在,如果您检查示例: 你有最常见的字母,别忘了你有空格和其他字符,但我认为你可以假设空格是最常见的字符

    所以现在这只是一个xor的问题:将我提供的表中最常用的字符与英语中最常用的字符进行比较,看看是否有小写字符,我发现了一个三个字母的单词,我认为这是只有这些数据的答案


    祝你好运,顺便说一句,这是个好问题

    我承认我不熟悉异或密码

    然而,它似乎与vigenere密码的概念非常相似。特别是在他们提到的不可破解加密中,密钥长度等于消息长度。这叫维南密码

    正如在另一个答案中提到的,破解vigenere密码的策略性方法涉及概率方法。我将不详细介绍,因为我学到的大部分理论都相对复杂,但可以发现维格纳是一系列凯撒密码

    不过,这个问题对您来说很容易,因为您已经知道密钥长度。正因为如此,正如您所提到的,您可以通过尝试每一个3个字母的组合来简单地使用蛮力

    我要做的是:取一段大小合理的密文,比如说10-20个字符,然后用蛮力的方法处理它。跟踪所有似乎可以创建可理解字母序列的密钥,然后在整个密文中使用这些密钥。这样我们就可以使用明显的暴力强制方法,但不必对整个问题进行暴力,因此我认为您不必担心限制输出


    也就是说,我同意在创建输出时,如果您得到一个不可打印的字符,您可能会中断循环并继续下一个关键点。我不会尝试任何比这更具体的东西,因为谁知道原始信息可能有什么,永远不要对你正在处理的数据做出假设。短路这样的逻辑总是一个好主意,尤其是在实现暴力解决方案时

    将密文拆分为3

    密文1由第1、4、7、10……个数字组成 密文2由第2、第5、第8、第11……个数字组成 密文3由第3、6、9、12……个数字组成


    现在您知道每个密码文本都是用相同的密钥字母加密的。现在对其进行标准频率分析。这将为您提供足够的线索,了解字母是什么。

    一个可能的解决方案是简单地假设加密文本中存在给定的三个字符序列。您可以使用三个字母的单词,或可能出现在英文文本中的三个字母序列(例如
    “a”
    :两个空格之间的字母“a”)。然后简单地尝试加密文本中该序列的所有可能位置。每个位置都允许您简单地重新计算密钥,然后将整个文本解密到一个文件中

    由于原始文本的长度为1201,因此需要浏览1199个文件。在这一点上,这只是一个耐心的问题,但您可以通过在另一个英语常用序列(例如,
    “are”
    )上使用简单的文本搜索实用程序(例如,使用Unix工具
    grep
    )来加快搜索速度


    我就这么做了,在不到五分钟的时间内得到了解密文本。

    我几天前刚刚解决了这个问题。在不影响您的前提下,我想描述一下我解决这个问题的方法。我说的一些话可能是多余的,你已经知道,但这是我的方法的一部分

    首先,我假设密钥与描述的完全一样,是三个小写ASCII字母。所以我在“aaa”开始暴力强迫,然后去了“zzz”。解密时,如果任何结果字节的值小于32(空格的ASCII值,最小的“可打印”ASCII值)或大于126(ASCII中最高可打印字符的波浪号“~”的ASCII值)然后我假设键是无效的,因为32和126之外的任何值对于纯英语文本都是无效字符。一旦有一个字节超出这个范围,我就停止解密,并转到下一个可能的位置