電子コードブック(ECB)サイファーブロックチェーン(CBC)サイファーフィードバック(CFB)出力フィードバック(OFB)カウンター(CTR)モードをC++またはJavaで実装したい。しかし、どこからどのように始めればよいのかわかりません。誰かが私に行う手順を提案できますか?
2 に答える
block_cipher_encrypt(plaintext, key)
これは実際には非常に単純です。入力として平文の単一ブロックとキーを受け取り、暗号文の単一ブロックを返すという関数が呼び出されたとしましょう。
ここで、平文のブロックの配列(たとえば、平文pt[i]
のi番目のブロック)とct
暗号文ブロックの配列があるとします。ECBを行うには、次のようになります。
for i from 0 to len(pt)-1:
ct[i] = block_cipher_encrypt(pt[i], key)
CBCモードの場合、IVも必要ですが、それでも非常に簡単です。
ct[0] = block_cipher_encrypt(XOR(pt[0], IV), key)
for i from 1 to len(pt):
ct[i] = block_cipher_encrypt(XOR(pt[i], ct[i-1]), key)
その他のモードについては、動作モードに関するWikipediaの記事を参照してください。これらは、暗号化と復号化の両方に適したブロック図を提供します。これが、上記の擬似コードに対して行ったことです。
Java Crypto APIは、開始するのに適した場所です。API を構成するクラスの概要、それらの使用方法、およびカスタム暗号化手法を実装するために拡張する必要があるクラスについて説明します。あなたがやろうとしていることの多くは、標準の crypto API の一部としてすでに利用可能です。そのため、それを理解したら、目的に合わせてカスタマイズするだけで済みます。
さらに、この API を独自の暗号化技術で拡張するための公式の Javaガイドもあり、これも役立つ場合があります。