2016-09-08 2 views
1

私はhaskellでDESアルゴリズムを書いていますが、試してみると正しい出力が得られず、すべての関数が独自にテストされています正しく動作する、私は暗号化するメッセージを撮影しました:plainText = 123456ABCD132536キー= AABB09182736CCDDで、DESで暗号化すると、出力cipherText = C0B7A8D05F3A829Cとして与えられます。サブキーはすべて(K1..K16)であり、l0、r0も正しいので、l1、r1、l2、r2ですが、ラウンド3ではr3 = B00A9591となりますが、次のようにB8089591となります。私が従うチュートリアル。DES暗号化関数が間違っている暗号文を返します

(私たちは、R2 = 4A1210F6、拡張後にそれは2540A40A17ACなり、サブキーK3 = 6EDA4ACF5B5とXORした後、我々は23AD00A6E219を取得している、置換後我々は232713FAを取得し、まっすぐに並べ替えた後、我々はEA727605を取得し、L2とfinaly XOR = 5A78E394私たちはB00A9591を取得する

私は手で行っても同じ結果が得られますが、ラウンド3で使用された関数が同じであるために問題が理解できませんでしたラウンド1と2で何の問題もありません。誰かが私にr3の正しい価値を与えることができ、何が問題になるかもしれないかについてのアイデアはありますか?それは私に非常に長い時間がかかりました。ありがとうございました。

+1

に見えます。あなたのコードに問題がある場合はとにかく、あなたは[最小、完全かつVerifyable例](/ヘルプ/ MCVE) –

+0

はい@ArtjomBとしてそれを表示する必要があります。イムは、申し訳ありませんが私は、暗号化に尋ねたが、彼らは、私は[OK]を私は新しいものを求めることなく – Balkis

+1

することができます[編集]あなたの質問ことを行いますが、ここで尋ねるべき私に言いました。ブロック暗号の実装をテストする場合 –

答えて

1

これは、キーは、読み取り専用属性とデフォルト値を除去することによって、入力することができるように修正されたJavaScript DES Exampleのコピーから行われます。キーを設定できる元のコードのコピーが、Google Codeで利用可能でした。

それは、出力暗号文c0b7a8d05f3a829c

Round 3 
E : 001001 010100 000010 100100 000010 100001 011110 101100 2540A40A17AC 
KS : 000001 101110 110110 100100 101011 001111 010110 110101 06EDA4ACF5B5 
E xor KS: 001000 111010 110100 000000 101001 101110 001000 011001 23AD00A6E219 
Sbox: 0010 0011 0010 0111 0001 0011 1111 0000 232713FA (should be 232713F0) 
P : 11100010 01110000 01110110 00000101 EA727605 (should be E2707605) 
L[i]: 01001010 00010010 00010000 11110110 
R[i]: 10111000 00001000 10010101 10010001 

を生産する16進数でのあなたの出力は、注釈を付け、それは0000であるべきときSボックス8の01指標12(1100)1010の出力を生成している行を教えてきました。

SボックスFIPSパブ46から8つの値:

13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7, 
    1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2, 
    7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8, 
    2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11, 

第二行下、13列要素。

B1からB6とラベル付けされた6ビットの入力011001の場合、B1とB6(01または1から数えて1)を連結し、B2をB5(1100)に連結して列を求めます。

以下Pの順列の違いは、二つの予想外の「1」ビットによって占められます。

Minimal Complete and Verifiable exampleがないと、それが唯一のエラーかどうかを判断できません。

0以外のすべてのキーで構成されたSボックスをテストするためのテストベクトルの情報については、vhdl - Data Encryption Standard test vectors - Stack Overflowを参照してください。 (答えの最後の段落でDropboxのリンクがまだ有効である。)

JS-DES.htmlへの変更を示すdiffは:あなたはどこからこの質問をコピーしたよう

623c623 
<   <td><input name="key" value="0000000000000000" size="25" type="text"></td> 
--- 
>   <td><input name="key" value="3b3898371520f75e" readonly="readonly" size="25" type="text"></td> 
627c627 
<   <td><input name="keyb" value="0000000000000000" size="25" type="text"></td> 
--- 
>   <td><input name="keyb" value="922fb510c71f436e" readonly="readonly" size="25" type="text"></td> 
関連する問題