0

这是一个 Vigenere 密文

EORLL TQFDI HOEZF CHBQN IFGGQ MBVXM SIMGK NCCSV
WSXYD VTLQS BVBMJ YRTXO JCNXH THWOD FTDCC RMHEH
SNXVY FLSXT ICNXM GUMET HMTUR PENSU TZHMV LODGN
MINKA DTLOG HEVNI DXQUG AZGRM YDEXR TUYRM LYXNZ
ZGJ

巧合指数给出了六 (6) 的变化:我知道这是正确的(我使用在线 Java 小程序使用密钥“QUARTZ”解密整个事情)。

然而,在这个问题中,我们只知道密钥的第一个和最后两个字母——“Q”和“TZ”。

到目前为止,我已经使用这个很棒的小程序将密文分成了多个切片。所以第一个切片是0、k、2k、3k、4k;第二个是1,k + 1,2k + 1,3k + 1;等等。

KeyPos=0: EQEQQSCXQJJHDEYIUTSVMTVUMTYJ
KeyPos=1: OFZNMICYSYCWCHFCMUULILNGYUX
KeyPos=2: RDFIBMSDBRNOCSLNERTONOIADYN
KeyPos=3: LICFVGVVVTXDRNSXTPZDKGDZERZ
KeyPos=4: LHHGXKWTBXHFMXXMHEHGAHXGXMZ
KeyPos=5: TOBGMNSLMOTTHVTGMNMNDEQRRLG

我的想法是计算每个块中频率最高的字母,希望最常见的字母能给我一些线索,让我知道如何找到“U”、“A”和“R”。但是,这些块中最常见的字母是:

KeyPos=0: Q,4 T,3 E,3, J,3
KeyPos=1: C,4 U,3 Y,3
KeyPos=2: N,4 O,3 R,3 D,3 B,2
KeyPos=3: V,4 D,3 Z,3
KeyPos=4: H,6 X,6 M,3 G,3
KeyPos=5: M,4 T,4 N,3 G,3

这会产生 QCNVHM 或 QUNVHM(慷慨),它们都与 QUARTZ 不相近。有在线小程序可以解决这个问题,所以它不能太短的文本从块中产生合适的频率计数。

我想我一定是以错误的方式处理这个问题。我只是希望你们中的一个人能够提供一些关于我哪里出错的线索。

ps 这是一个数字加密类。

4

2 回答 2

1

有趣的问题...

我没有破解原始密文的编程解决方案,但我能够用一点点脑力和一些有用的 JavaScript 来解决它。

我首先使用此页面和您提供的信息。提供密文,密钥长度为 6 并点击初始化。这里的方法的好处是明文或密钥中的未知数都保留为连字符。

更新密钥,仅添加您知道的内容Q---TZ,然后单击“更新纯文本”。此时我们知道:

o---sua---opo---oca---nha---enc---rom---dth---ama---int---ept---our---mun- --tio---ewi---eus---the---ond---loc---onf---now---hed---off---ere---nsw--- esd---tmi---ght

在这里,我应用了一些脑力。您开始识别明文的位。thenowoff露面。最后,有ght- 这让我觉得前面的字母可能是元音。例如lightthought。我将相应的连字符替换为u并单击更新关键字以查找会产生该组合的字母。匹配的字母原来是F。我认为更新了明文以查看结果。他们看起来并不乐观。所以我尝试i了,结果是:

o--usua--ropo--loca--onha--eenc--prom--edth--eama--eint--cept--gour--mmun--atio--wewi--beus--gthe- -cond--yloc--ionf--mnow--thed--poff--mere--insw--nesd--atmi--ight

现在我们正在取得进展。一开始我看到了一些可能的东西,然后我看到了usual更远的地方int--cept,接近结尾w--nesd-- at mi--ight。瞧。填写wednesday和更新关键字 yielded的字母QUARTZ

... 那么,如何将这种方法移植到代码中?目前还不确定最好的方法。在密钥中使用已知字符、部分解密密文并暴力破解其余部分的想法很有吸引力。但是如果没有方便的字典,我不确定最好的暴力破解方法是什么......

待续(也许)……

于 2011-06-23T23:18:22.383 回答
1

算法不仅会考虑最常见的字母,还会考虑整个字母表的频率模式。从技术上讲,您计算每个可能变化的重合指数并考虑最大的变化。

于 2011-06-24T12:35:51.473 回答