2016-04-08 9 views
1

JavaでMD5ハッシュ生成のコードを取得しました。これは、バイト配列「バイト」のハッシュを生成し、整数に変換し、文字列に次のようバイトで整数に変換してからJavaで文字列に変換する

byte[] bytes=md.digest(textToHash.getBytes()); 

StringBuilder sb=new StringBuilder(); 
for(int i=0;i<bytes.length;i++) 
sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)); 

私はbytes[i] & 0xffは32ビット長コピーの最下位バイトまでのバイトの整数にバイトを変換することを理解しました整数:

What does value & 0xff do in Java?

私は+ 0x100, 16は、上記のコードの行4で、括弧の中に何をするか理解できませんでしたが。あなたの助けに感謝します。

答えて

1

Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)を分解:

  • は(256小数である)0x100を追加すると、結果の進数表現が正確に9ビットを有する保証1に9番目のビットを設定します。あなたは同等に& 0x100を行うことができます。
  • ビット8を設定すると、toString()の結果は9文字(ゼロと1)になります。
  • substring(1)を効果的に8ビットを無視し、下位8ビット

それではを出力しますか?

このコードでは、先頭に0が付いているため、すべての値は8バイナリ文字です。 Integer.toString()だけでこれを行う方法はありません。

+0

ありがとうございますが、それは何ですか、16? –

+0

'16'は* radix *です。つまり16進数の16進数です。コードは基本的に '' 1 '' – Bohemian

+0

の代わりに' '01''として '1'を出力します。私はフォーラムでも簡単な方法を見つけました:sb.append(String.format( "%02X"、bytes [i])); –

関連する問題