2009-03-06 1 views
1

私はAアプリケーションの出力ファイルを暗号化してからBアプリケーションで解読する必要がありますが、私は1000バイトのバッファを暗号化して別のサイズBアプリケーションでは、戻り値はエラーです。私の要件を満たす暗号化はありますか?ありがとう。ここ は私のサンプルコードです:中間から暗号を解読するにはどうすればよいですか?

clTemp.EncryptDataDirectly(buffer, 1000); 
clTemp.DecryptDataDirectly(buffer + 1, 500); 

答えて

3

免責事項:このWindows APIが暗号化されているかどうかわかりません。これは問題の一般的な概要に過ぎません。詳細については、常識とドキュメントを参照してください。

あり二つの可能性:

  1. ストリーム暗号。一度に1バイト(または多分偶数ビット)を暗号化し、暗号化されたストリームの始めから適切に復号化する必要があります。いくつかの暗号には同期能力があり、送信時に小さなエラーが発生しても回復するのに役立ちます。

  2. ブロック暗号。それらは固定サイズのブロックを暗号化し、64または128ビットは一般的なブロックサイズです。しかし、彼らは暗号化のために異なるモードを使うことができます。たとえば、ECBはすべてのブロックを単独で暗号化します。あなたはファイルの途中に飛び込み、ブロックをつかんで解読することができます。しかし、攻撃者が暗号化されたテキストを知っていて、あなたが使ったキーを見つけようとする、既知の平文攻撃にあなたを残します。 CBCまたはフィードバックを含む他のモードはより安全ですが、この場合、暗号化されたファイルの先頭で復号化を再開する必要があります。ここで

いくつかの関連するWikipediaの記事です:

0

あなたが何かを暗号化して、それだけの部分を解読したいですか?始めからではありませんか?私はOKを理解しましたか?

+0

はい、あなたは正しいです。 –

+0

。非常に基本的な暗号化システムを使用する必要があります。 CXのように(Cesarメソッド)。すべての数値メソッドは(データの各バイトに依存するため)解読することは不可能です。 – gbianchi

+0

CX(Cesarメソッド)の実装方法を確認するためのサンプルコードまたはドキュメントは、どこから入手できますか?ありがとう。 –

0

電子コードブック(ECB)モードで使用できるブロック暗号アルゴリズムを使用できます。つまり、すべてのブロックの暗号化は、その前身の暗号化とは独立しています。これにより、コードブロックの先頭から開始し、コードブロック内にない限り、バッファ内の任意のポイントで復号化を開始することができます。

例では、64ビットのブロックサイズを持つ暗号化のDESアルゴリズムを選択しました。したがって、暗号化されたプレーンテキストと同じブロックサイズの暗号を復号化する必要があります。しかし、あなたは暗号の始まりを開始する必要はありません。あなたは64の倍数である各点から始めることもできます。

これはおそらくあなたを助けるかもしれません。

ブロック暗号のいくつかの詳細:

Block cipher

Block cipher modes

Caesar cipher(これはブロックchiperではありません)

0

データ暗号化アルゴリズムのほとんどは、1を暗号化し、block cipherありますチャンク、例えば128ビットである。

ブロック暗号を安全にするために、ほとんどの人は、暗号ブロック連鎖またはCBCと呼ばれる最初の暗号化の出力に基づいて、2番目のブロックの暗号化を初期化します。 Electronic Code Block(ECB)モードを使用すると、一度に1ブロックずつ暗号化をオフにして暗号化できますが、複雑さはいくらか失われます。ここで

は、ECBがnot so secureである理由の例です:

Original http://upload.wikimedia.org/wikipedia/en/5/56/Tux.jpg Tux ECB Tux chaining

第2の画像はECBを使用して暗号化され、最後の一つはチェーンを使用して暗号化されます。

1

一つの解決策は、CTR(カウンター)ブロックモードで暗号を使用することです。これは、復号化中のランダムアクセスを可能にする。ブロックはお互いに依存していないので、キーとブロック番号だけを知る必要があります。

詳細はwikipedias descriptionを参照してください。