2017-04-22 9 views
0

非常にシンプルなCS質問です。私はそれがBSD unix md5ハッシュビット値

The algorithm takes as input a message of arbitrary length and 
produces as output a 128-bit "fingerprint" or "message digest" of the input. 

そのMD5は、与えられた入力に対して128ビット= 16バイトのハッシュを生成し、言って言うMD5 documentation, RFC 1321を読んでいました。

次に、UNIX/Macosでmd5スクリプトを使用するか、MD5 online generatorを使用すると、生成する32文字の長さのハッシュが32バイトになります。 (1文字= 1バイトは私の理解です)

例:

$ md5 <<<"1" 
b026324c6904b2a9cb4b88d6d61c81d1 


$ printf "b026324c6904b2a9cb4b88d6d61c81d1" | wc -c 
     32 

しかし、私はjava MD5 APIを使用するとしようとすると、それは私のマニュアルに従って真実である16バイトのハッシュを提供します。

scala> import java.security.MessageDigest 
import java.security.MessageDigest 

scala> MessageDigest.getInstance("MD5").digest("1".getBytes) 
res0: Array[Byte] = Array(-60, -54, 66, 56, -96, -71, 35, -126, 13, -52, 80, -102, 111, 117, -124, -101) 

scala> val hash = MessageDigest.getInstance("MD5").digest("1".getBytes("UTF-8")).length 
hash: Int = 16 

質問は私がmd5(BSD unixツール)で見つからなかったものです。

+0

https://stackoverflow.com/q/6317276/432903 – prayagupd

答えて

1

md5の出力は、16進数で、16進数としても知られています。この形式では、1バイトは2文字で表示されます。 16バイトのハッシュが32文字の文字列として表示されます。

+0

ありがとう、ありがとう。ベース32でそれを得る方法はありますか?xxdまたは他のツール?私はオンラインツールをチェックすることができます - https://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html私に正確な128ビットを与える – prayagupd

+0

なぜあなたはベース32を望むでしょう、各桁は5ビットをエンコードしますが長さハッシュ128は5で割り切れないので、埋め込みを追加する必要があります – Joni

+0

ここで何かを学ぶことを試みています。私はMD5の結果HexaDecimalを理解しました。これは '[0-9A-F]'であり、最大値は '' 7ffffffffffffff''(https://en.wikipedia.org/wiki/2,147,483,647#In_computing)です。ハッシュである16進数(例えば 'c4ca4238a0b923820dcc509a6f75849b')を10進整数に変換するにはどうすればよいですか?それは単に '..... + 9 * 16^1 + b * 16^0'ですか?それは本当に当てはまるようです - http://www.rapidtables.com/convert/number/hex-to-decimal.htm – prayagupd

関連する問題