我有 ascii 密码的编码功能,但需要帮助来解码它
I have the encode function for an ascii cipher, but need help to how to decode it
我正在研究一个涉及解码密码的谜题。我已获得用于对密文进行编码的函数,但我不确定如何对其进行逆向工程以找到解码函数。
这是函数,在JavaScript:
function encodeText(ascii,x,y,z) {
for (i=0; i<ascii.length; i++) {
if(i%3==0){
ascii[i]= (ascii[i]+x) % 256;
}
if(i%3==1){
ascii[i]=(ascii[i]+y) % 256;
}
if(i%3==2){
ascii[i]=(ascii[i]+z) % 256;
}
}
return ascii;
}
我知道它 returns 一个数字数组,这是我收到的密文。
非常感谢帮助!
这是维吉尼亚密码,密钥长度为 3 (x, y, z)。
ascii[i]
和 x
都小于 256,但 (ascii[i]+x)
可能导致数字大于 255。这就是模运算符将其翻转回范围 0 的原因-255.
解密看起来像 (ascii[i] - x + 256) % 256
。
ascii[i] - x
与 ascii[i] + x
正好相反,所以我认为这很清楚。 ascii[i]
可能是一个小于 x
的数字。在这种情况下,ascii[i] - x
可能小于零。问题是 -5 % 256
是 -5
而不是 251
(example)。因此,我们需要将所有可能的结果移动到正数,然后应用模运算。
例如,(74 - 80 + 256)
是 250,250 % 256
仍然是 250
。此外,(84 - 80 + 256)
是 260
而 260 % 256
是 4
这就是区别。
凯撒密码和维吉尼亚密码通常被frequency analysis破解。您的 Vigenère 密码实例由三个凯撒密码组成。密钥 space 是 256*256*256 = 16,777,216,它太大而无法遍历并读取所有可能的恢复明文。
您应该知道明文使用的是什么语言。如果知道,那么您可以将密文拆分为三个字符串。第一个、第四个、第七个等等字符进入第一个字符串。第二个、第五个、第八个等等字符进入第二个字符串。第 3 个、第 6 个、第 9 个等字符进入第三个字符串。现在,您可以对这三个结果字符串中的每一个进行频率分析,并将结果与目标语言的字母频率进行比较 (english example)。
如果密文足够长,你应该可以判断哪些加密字母是e
和n
。当你拥有它时,转变是线性的。假设您标识为 e
的字母的序值为 43。如果您查看 ASCII table,实际的小写字母 e
的序值为 101。那将意味着你必须计算 43 - 101 = -58。由于这必须是正数,我们可以加上 256 得到 x = 198
。您也应该对 y
(第二个字符串)和 z
(第三个字符串)重复该过程。
我正在研究一个涉及解码密码的谜题。我已获得用于对密文进行编码的函数,但我不确定如何对其进行逆向工程以找到解码函数。
这是函数,在JavaScript:
function encodeText(ascii,x,y,z) {
for (i=0; i<ascii.length; i++) {
if(i%3==0){
ascii[i]= (ascii[i]+x) % 256;
}
if(i%3==1){
ascii[i]=(ascii[i]+y) % 256;
}
if(i%3==2){
ascii[i]=(ascii[i]+z) % 256;
}
}
return ascii;
}
我知道它 returns 一个数字数组,这是我收到的密文。
非常感谢帮助!
这是维吉尼亚密码,密钥长度为 3 (x, y, z)。
ascii[i]
和 x
都小于 256,但 (ascii[i]+x)
可能导致数字大于 255。这就是模运算符将其翻转回范围 0 的原因-255.
解密看起来像 (ascii[i] - x + 256) % 256
。
ascii[i] - x
与 ascii[i] + x
正好相反,所以我认为这很清楚。 ascii[i]
可能是一个小于 x
的数字。在这种情况下,ascii[i] - x
可能小于零。问题是 -5 % 256
是 -5
而不是 251
(example)。因此,我们需要将所有可能的结果移动到正数,然后应用模运算。
例如,(74 - 80 + 256)
是 250,250 % 256
仍然是 250
。此外,(84 - 80 + 256)
是 260
而 260 % 256
是 4
这就是区别。
凯撒密码和维吉尼亚密码通常被frequency analysis破解。您的 Vigenère 密码实例由三个凯撒密码组成。密钥 space 是 256*256*256 = 16,777,216,它太大而无法遍历并读取所有可能的恢复明文。
您应该知道明文使用的是什么语言。如果知道,那么您可以将密文拆分为三个字符串。第一个、第四个、第七个等等字符进入第一个字符串。第二个、第五个、第八个等等字符进入第二个字符串。第 3 个、第 6 个、第 9 个等字符进入第三个字符串。现在,您可以对这三个结果字符串中的每一个进行频率分析,并将结果与目标语言的字母频率进行比较 (english example)。
如果密文足够长,你应该可以判断哪些加密字母是e
和n
。当你拥有它时,转变是线性的。假设您标识为 e
的字母的序值为 43。如果您查看 ASCII table,实际的小写字母 e
的序值为 101。那将意味着你必须计算 43 - 101 = -58。由于这必须是正数,我们可以加上 256 得到 x = 198
。您也应该对 y
(第二个字符串)和 z
(第三个字符串)重复该过程。