2012-01-17 12 views
1

reference implementation in C(と)ですが、mainがありません。実装した最初のいくつかのパスは、私が試みた "既知のベクトル"テストケースを正しく処理しませんでした。私はAPIを正しく使用しないという問題を見ていると思うが、どこでエラーを探し始めるべきかわからない。その1つの上で私の頭を打つのではなく、私はむしろコードベースで始めたい:テストに TwoFishの作業参照の実装ですか?

  • を持ってボックス
  • のうち

    1. ランは自己
    2. を含まれています分かりやすくするためにが記載されている。

    その他CやCのようなC++コードのような強い好みがあります。


    注:この時点では、コードの可読性に関心があります。 1つのブロックを暗号化および復号化できる小型でシンプルなコードと、コールまたは3つをハードコーディングする主な機能が理想的です。それ以外のもの(ほとんどのユーザーインターフェイスのようなもの)は、私の使用事例では騒音に過ぎません。

    また、Boostよりも制限の厳しいライセンスを持っているものは、私と比較する良い値と状態を知る源としてのみ役立ちます。 twofishですが組み込まと

  • 答えて

    -1

    最終的には、上記のCの示唆Iに由来するthis Python implementationが見つかりました。私の問題の根本的な原因は、キーの言葉が間違った順序であることが判明しました。

    あなたがいるTwoFishを使用してのcut'n'paste例を発見しただろう libObfuscate が提供するリファレンス実装を 読むためだけの分を取っていた場合
    0
    Ubuntu

    cryptcatパッケージとDebiannc(1)様機能を提供する。

    いるTwoFishサポートは、ソースパッケージにtwofish2.cctwofish2.hに設けられています。 farm9crypt.ccは、Cスタイルread()write()の機能とtwofishアルゴリズムの間のレイヤーを提供します。これはC言語のC++と同じスタイルです。

    +0

    偶然、ソースのオンラインコピーがありますか?また、 'read()'や 'write()'を使うものは、自己完結型のものとはまったく異なります。 OTOHもっと良いものが見つからなければ、私はそれを減らすことができると思う。 – BCS

    +0

    ソースtarballは、http://packages.ubuntu.com/precise/cryptcatで見つけることができます。ページ中央付近の右側の列を見てください。どこにでも簡単に閲覧できるソースがあるかどうかはわかりません。 – sarnold

    +0

    次回はタールでシステムを見ていきます:/ – BCS

    0

    // Encrypt : outBuf [16] = Twofish ECB (inBuf [16]) 
    TWOFISH_STATIC_DATA twofish; 
    BYTE passw [32]; 
    BYTE inBuf [16] , outBuf [16]; 
    
    memset(&twofish , 0 , sizeof(TWOFISH_STATIC_DATA)); 
    Twofish_set_key(&twofish.key , (DWORD *) passw , 256); 
    Twofish_encrypt(&twofish.key , (DWORD *) inBuf , (DWORD *) outBuf); 
    

    重篤なリファレンス実装では、他の が、単一ブロックのECBの実装もないだろう。

    さらにデータを暗号化する場合は、暗号ブロックchaining mode(CBC、ecc ...)を選択し、ECBの上に適用する必要があります。

    +0

    そのコードを見ると、それは私に何の役にも立たなかったでしょう:実際の値はありません(または、私が見る限り、主要な機能です)。それが起こるにつれて、問題はバイトオーダーを正しく考慮していないことでした。 – BCS

    0

    Twofishのデザイナーの一人であるNeils Fergusonが実装したものをC++でラップしています(非常に軽く、ほとんど変更を加えません)。私はここではほとんど仕事をしておらず、Twofishがどのように機能するのかを主張していないことを強く強調しなければなりません(それはそれを読んだ後ですが、

    コンストラクタは包括的​​なテストを行い、テストが失敗した場合は中止します。完全に構築されたオブジェクトを取得すると、それが機能することがわかります。

    私はここにソースを入れました:http://www.cartotype.com/assets/downloads/twofish/

    ファイルにはさまざまな構成可能なものがあります。あなたが変更したいかもしれないものは、私のバージョンでは出口を強制するためにアドレス0に書き込もうとするTwofish_fatalの中断関数ですが、それは一部のプラットフォームでは機能しません。

    上記のコードと同様に、これはすべて単一の16バイトブロック(ECB = Electronic Code Bookモード)をエンコードします。しかし、暗号化の前に暗号文の前のブロックと排他的論理和をとる暗号ブロック連鎖のような、より良いモードを実装することは非常に簡単です(16バイトのランダムな '初期化ベクトル'を暗号化されたデータとともに送信する)。

    また、Bruce SchneierのオープンソースパスワードデータベースプログラムであるPasswordSafeのソースコードには、http://passwordsafe.git.sourceforge.net/git/gitweb.cgi?p=passwordsafe/pwsafe.git;a=tree;f=pwsafe/pwsafe/src/core;hb=HEADという関連ソースがあります。私はそれを試していないので、簡単に統合することはできません。

    関連する問題