私たちは、 DES アルゴリズム(暗号化と復号化に使用される)の Java 実装を作成するように依頼されました。いくつか質問がありました:
DES では、64 ビットのプレーン テキストまたは暗号テキストと、正確に 56 ビットの共有キーが必要であると指定されています。バイト数を与えるメソッドは何ですか?
このアルゴリズムでは、64 ビットを 2 つの 32 ビット セクションに分割するなど、多くのビット レベル操作が使用されます。これはどのように行うことができますか?
私たちは、 DES アルゴリズム(暗号化と復号化に使用される)の Java 実装を作成するように依頼されました。いくつか質問がありました:
DES では、64 ビットのプレーン テキストまたは暗号テキストと、正確に 56 ビットの共有キーが必要であると指定されています。バイト数を与えるメソッドは何ですか?
このアルゴリズムでは、64 ビットを 2 つの 32 ビット セクションに分割するなど、多くのビット レベル操作が使用されます。これはどのように行うことができますか?
これは実際にはあなたの質問に対する答えではありませんが、私はそれを言わなければなりません:
暗号化アルゴリズムを自分で実装することは、ほとんどの場合、非常に悪い考えです。
説明させてください:
暗号は難しい。独自のアルゴリズムを発明するのに十分なほどそれを理解している人はほとんどいません。また、他の人の助けを借りて、すぐに破ることができないことを確認する人もいます.
自分の意図に対して十分であることが証明されている既存のアルゴリズムを使用する場合でも、安全なアルゴリズムの実装を壊す微妙なエラーの可能性が十分にあるため、それは依然として悪い考えです。それは何度も起こったので、私は頻度を数え切れませんでした。
そして、本当に幸運で勤勉で完璧な実装を作成できたとしても、すでに開発、テスト、証明された既存の実装を使用しないのは、時間とリソースの無駄です。
そして、DES について一言。ただし、ご存知のことと思いますが、純粋な DES は、今日の標準では非常に弱いと考えられています。したがって、より優れた 3DES を実装する必要があります。
編集: OK、すべての話をした後、これが宿題のように見えることに気付いた後 (頭を上げてくれてありがとう)、私は DES を少し掘り下げました。これが私がこれまでに得たものです:
DES は、64 ビット ブロックで動作するブロック暗号です。いくつかの異なる動作モードがあります。これらは、クリア テキストを 64 ビット ブロックに分割する方法を決定します。一部のモードではpaddingが必要です。つまり、最後のブロックをデータで埋め、暗号化テキストを復号化した後に削除できます。上記のウィキペディアの記事のパディングの段落には、DES でパディングがどのように使用されたかについての説明が含まれています。
理論についてはこれで、Javaでそれを行う方法は...
byte[] bytesOfString = clearTextString.getBytes();
これにより、暗号化する必要がある文字列のバイト配列が得られます。残りは単純なカウントと追加です...
この改訂された回答があなたにとってより役立つことを願っています。
既存の bouncycastle ライブラリを使用できません: http://www.bouncycastle.org/docs/docs1.6/index.html ?
このライブラリの使用例は、David Hook による「Beginning Cryptography with Java」に多数記載されています。
ここまでで、8 ビット = 1 バイトであることを知っているはずです。暗号化のすべてはビットで機能し、バッファを定義する場合を除いて、実際にはバイトは必要ありません。
分割では、ビット演算が使用されます。下半分の上位ビットをマスクし、上半分の上位ビットをシフトします。既にリファレンスをお持ちだと思います。それらは非常に貴重なリソースですが、ビット演算がどのように機能するかを絶対に知っておく必要があります。プロジェクトを台無しにしない優れたリソースは、CABAC などの圧縮アルゴリズムです。これらも同様にビット指向であるためです。次に、タブを閉じて、仕様を使用して独自の仕様を作成してみてください。