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」を使用して全体を復号化しました)。

ただし、この質問では、キーの最初と最後の 2 文字 (「Q」と「TZ」) しか教えられません。

これまでのところ、この素晴らしいアプレットを使用して暗号文をスライスに分割しました。したがって、最初のスライスは 0、k、2k、3k、4k です。2 番目は 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

アルゴリズムは、最も頻度の高い文字だけでなく、アルファベット全体の頻度パターンも考慮します。技術的には、可能なシフトごとに一致指数を計算し、最大のものを検討します。

于 2011-06-24T12:35:51.473 に答える
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

ここで私はちょっと頭脳の力を使いました。平文のビットを認識し始めます。the、登場しますnowoff最後にght-これは、前の文字が母音である可能性が高いと思いました。たとえば、lightまたはthought. 対応するハイフンを に置き換え、u更新キーワードをクリックして、その組み合わせを生成する文字を見つけました。一致する文字は になりますF。結果を確認するために平文を更新したと思います。彼らは有望に見えませんでした。だから私はi代わりに試してみました:

o--usua--ropo--loca--onha--enc--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てキーワードを更新すると、QUARTZ.

... では、このアプローチをコードに移植するにはどうすればよいでしょうか? それを行う最善の方法についてはまだわかりません。キーに既知の文字を使用し、暗号文を部分的に解読し、残りを総当たり攻撃するというアイデアは魅力的です。しかし、手元に辞書がなければ、最善のブルートフォース方法が何であるかはわかりません...

つづく(たぶん)…

于 2011-06-23T23:18:22.383 に答える