每個byte為8位,用16進制表示需要2個16進制位
比如:
半個byte:(二進制1111
) == (十進制15
) == (十六進制f
)
一個byte:(二進制11111111
) == (十進制255
) == (十六進制ff
)
import javax.xml.bind.DatatypeConverter;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
MessageDigest messageDigest = null;
try {
String str = "測試字符串";
messageDigest = MessageDigest.getInstance("SHA1");
messageDigest.update(str.getBytes("UTF-8"));
byte bytes[] = messageDigest.digest();
BigInteger bigInteger = new BigInteger(1, bytes);
System.out.println(bigInteger.toString(16));
String strHexBytes = DatatypeConverter.printHexBinary(bytes);
System.out.println(strHexBytes);
System.out.println(bytes2hex(bytes));
} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
e.printStackTrace();
}
}
public static String bytes2hex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
String tmp = null;
for (byte b : bytes) {
// 將每個字節(jié)與0xFF進行與運算介蛉,然后轉(zhuǎn)化為10進制熔脂,然后借助于Integer再轉(zhuǎn)化為16進制
tmp = Integer.toHexString(0xFF & b);
if (tmp.length() == 1) {
tmp = "0" + tmp;
}
sb.append(tmp);
}
return sb.toString();
}
}