1

Java に関する有用な回答は、ここまたは Web で一般的に見つかりません。問題は一見単純です。任意のサイズのバイト配列に含まれるビット数をカウントする方法が必要です。バイト配列は、16 進数、10 進数、または 2 進数の値を保持できます。

これは、答えを見ると自分を蹴飛ばしてしまうような質問の 1 つだと確信していますが、非常にイライラしています。メソッドは次のようになります。

public int bitsInByteArray(byte[] b) {
    return - sum of bit count (ie the sum total bits, not the sum of their values) 
    of each byte in b
}

方向性やアドバイスをいただければ幸いです。

編集 - 申し訳ありませんが、私はこれをまったく正しく言いませんでした。私は暗号割り当てを行っており、「キー k で AES を使用して 64 ゼロ ビットを含む単一ブロックを暗号化する」ように求められました。 64個のゼロ要素。問題は、これは確かに 512 ビットですか? では、ゼロの値を 8 つ入れればよいのでしょうか。

これを行うと、暗号化された出力は -75 111 69 107 -18 88 51 89 68 -123 -49 18 -26 -109 94 21 になります。

もう一度復号化すると、元の 8 つのゼロが得られます。これは AES では通常のことですか、それとも何か間違っている可能性があります。ブロック暗号は、暗号化と復号化の両方で同じサイズの入力/出力を生成すると考えました。

4

2 に答える 2

6

Javaが で定義する1 バイトが8 ビットに等しいとするとByte.SIZE、次のように記述できます。

 public int bitsInByteArray(final byte[] b) {
     return b.length * Byte.SIZE;
 }
于 2012-10-26T20:17:14.627 に答える
1

他の人がすでに言ったように、バイト配列の場合、バイトは常に100%8ビットであることが保証されているため、答えは長さを8倍することです。

ただし、他の型 (int、long など) の配列がある場合、Java には特定の型のバイト サイズを取得する sizeOf メソッドがないため、行き詰まります。

これらのタイプは *通常は現在標準化されていますが、もちろん *場所によって異なる可能性があります (それは非常にありそうもないことです)。

これは宿題ですか?そうでない場合... Javaについてこの質問をしている場合、おそらく何か間違ったことをしているでしょう。

于 2012-10-26T20:18:59.733 に答える