2011-06-18 5 views
-4

私は、CipherInputStreamなどを使用してバイトを暗号化しているインターネット上のコードサンプルをいくつか見つけました... 1000ビットのようなファイルを持っていたらどうすればDESを適用できますか?私はJavaでそれをやっていますDESなどの暗号化アルゴリズムをビットまたはバイトに適用する必要がありますか?

+0

バイトは単純に8ビットのグループであることはご存知でしょうか? – zneak

+0

はいわかっています!私は実際には7、-115,88などの値を持つバイト配列を持っています。 –

+0

人々はあなたを助けてくれて、素敵です! – user774411

答えて

1

Javaには1バイト未満のものにアクセスできるプリミティブ型はありません。したがって、Javaのビットではなくバイトで作業する必要があります。

1000ビットのようなファイルがあれば、どのようにDESを適用できますか?

バイトを使用します。 Cipher.doUpdateCipher.doFinalメソッドはバイトを使用しますが、むしろそれらの配列です。パディングなしのデータを処理するには、適切なパディングスキームを使用します。

+0

... Byteを表すビット数は 'java.lang.Byte.SIZE'で与えられます。 –

+0

@Fatal、JLSはそれを定義します。 –

+0

私には恥があります。 JLSとは何ですか? :-) –

1

これはダウン投票にもかかわらず、かなり合理的な質問です。

多くの暗号化モード(CBCなど)では、入力が基本暗号のブロックサイズの倍数であることが必要です(たとえば、AESの場合は16バイト、DESの場合は8バイト)。これを達成するために、パディングスキームを使用する。 平文を任意のビット長で暗号化できるかどうかは、使用する埋め込みスキームによって異なります。

最も一般的に使用されるパディングスキーム(つまり、PKCS#5パディング)は、nバイトの値nをプレーンテキストの前に付加します。 これは明らかに平文がバイトであることを必要とします。しかし、任意の入力を可能にするパディングスキームは知られていません。たとえば、いわゆる「ビットパディング」は、プレーンテキストに1つの1ビットを追加し、入力の長さが暗号のブロックサイズの倍数になるまで、必要な数の0ビットを追加します。例えば、ISO/IEC 9797-1標準がこれを提案している。

アプリケーションで任意のビット長をサポートするかどうかは、使用する暗号ライブラリも考慮する必要があります。いくつかの暗号アルゴリズムは、ビット単位で任意のサイズの入力を可能にするために標準化されていますが、暗号ライブラリでは実装できない場合があります。 など。ハッシュ関数SHA-1は4ビットの文字列 '0101'などの入力に対しては十分に定義されていますが、 はこのハッシュを実際に計算できるライブラリを見つけるのに問題があります。

関連する問題