crypt.digest()方法返回一个byte[]。这个byte数组是正确的SHA-1摘要,但是加密哈希通常以十六进制形式显示给人类。你哈希中的每个字节将导致两个十六进制数字。
为了安全地将字节转换为十六进制,请使用以下方法:
// %1$ == arg 1
// 02 == pad with 0's
// x == convert to hex
String hex = String.format("%1$02x", byteValue);
这段代码片段可用于将字符转换为十六进制:
import java.io.*;
public class UnicodeFormatter {
static public String byteToHex(byte b) {
char hexDigit[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
};
char[] array = { hexDigit[(b >> 4) & 0x0f], hexDigit[b & 0x0f] };
return new String(array);
}
static public String charToHex(char c) {
byte hi = (byte) (c >>> 8);
byte lo = (byte) (c & 0xff);
return byteToHex(hi) + byteToHex(lo);
}
}
请注意,在Java中使用字节非常容易出错。建议您仔细检查每个步骤并测试一些奇怪的情况。
此外,您应该考虑使用比SHA-1更强大的加密算法。
http://csrc.nist.gov/groups/ST/hash/statement.html
sha1
зҡ„е“ҲеёҢз®—жі•жқҘе“ҲеёҢеҜҶз ҒгҖӮдҪ еә”иҜҘдҪҝз”ЁеғҸbcrypt
жҲ–иҖ…scrypt
иҝҷж ·зҡ„еҜҶз Ғе“ҲеёҢз®—жі•гҖӮ - chacham15