2013-08-13 5 views
0

С помощью Java я преобразовываю значение String в хэш, используя SHA1 в экземпляре MessageDigest. Я в точке, где я создал хеш-объект:Что означает (b & 0xff)?

MessageDigest md = MessageDigest.getInstance("SHA1"); 
byte[] hash = md.digest(password.getBytes("UTF-8")); 

Часть я не понимаю, что б & 0xff означает, в следующем коде:

StringBuilder sb = new StringBuilder(2*hash.length); 
for(byte b : hash) { 
    sb.append(String.format("%02x", b & 0xff)); 
} 

Я знаю, что% 02X средства чтобы указать формат, в котором есть два символа с шестнадцатеричным значением, но я не знаю, что такое второй параметр, что он делает с каждым байтом или что он означает. Простое объяснение было бы здорово! :-)

+0

Случайное примечание: если вы можете использовать сторонние библиотеки, все это одна строка 'Hashing.sha1(). HashString (пароль, Charsets.UTF_8) .toString()' с [Guava] (https: //code.google.com/p/guava-libraries/). –

ответ

2

Это bitwise AND operator. b & 0xff получает последний байт b. Поскольку b уже есть byte, я не вижу в этом никакого смысла: результат String.format тот же.

+1

См. Дублированный ответ, почему это поразрядное - и полезно в контексте OP. Кроме того, b является байтом. –

+0

@ Энди Томас: спасибо! –

+0

Спасибо, что ответили на мой вопрос, ребята, очень полезно. –