2013-08-13 4 views
0

자바에서는 MessageDigest 인스턴스의 SHA1을 사용하여 String 값을 해시로 변환합니다. 내가 해시 객체를 생성 한 시점에서입니다 :(b & 0xff)는 무엇을 의미합니까?

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

내가 이해하지 못하는 부분은 & 0xff가 b를 다음 코드의 의미입니다 :

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

내가 아는 % 02x 의미 두 개의 문자가 16 진법을 사용하는 형식을 지정하는 데 두 번째 매개 변수가 무엇인지, 각 바이트에 무엇을하는지 또는 그것이 무엇을 의미하는지 모릅니다. 간단한 설명이 좋을 것입니다! :-)

+0

임의 사이드 참고 : 타사 라이브러리를 사용할 수 있다면이 모든 것이 [Guava] (https : //www.google.com/support/bin/answer.py?hl=ko)와 함께 'Hashing.sha1 (hashString (password, Charsets.UTF_8) .toString() //code.google.com/p/guava-libraries/). –

답변

2

그건 bitwise AND operator입니다. b & 0xffb의 마지막 바이트를 가져옵니다. b은 이미 byte이므로이 점에 대해서는 전혀 알지 못합니다. String.format의 결과는 같습니다.

+1

왜 bitwise-AND가 OP 문맥에서 유용한 지에 대한 중복 답변을보십시오. 또한, b는 1 바이트입니다. –

+0

@AndyThomas : 감사합니다! –

+0

내 질문에 대답 해 주셔서 고맙습니다. 매우 도움이됩니다. –

관련 문제