使用Java,我在MessageDigest实例上使用SHA1将String值转换为哈希值。我正处于创建哈希对象的位置:
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] hash = md.digest(password.getBytes("UTF-8"));
我不明白的部分是b& 0xff表示以下代码:
StringBuilder sb = new StringBuilder(2*hash.length);
for(byte b : hash) {
sb.append(String.format("%02x", b & 0xff));
}
我知道%02x意味着指定一个格式,其中有两个字符使用十六进制,但我不知道第二个参数是什么,它对每个字节做了什么或它意味着什么。一个简单的解释会很棒! : - )
答案 0 :(得分:2)
那是bitwise AND operator。 b & 0xff
获取b
的最后一个字节。由于b
已经是byte
,我认为没有任何意义:String.format
的结果是相同的。