java中的sha1函数的替代是什么
就像在php中一样
sha1("here is string");
java中的内容
答案 0 :(得分:3)
您在Java中使用java.security.MessageDigest
类。但请注意,哈希通常应用于二进制数据而不是字符串 - 因此您需要首先将字符串转换为字节数组,通常使用String.getBytes(String)
方法 - 确保使用重载它指定编码而不是使用平台默认值。例如(异常处理省略):
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
byte[] data = text.getBytes("UTF-8");
byte[] hash = sha1.digest(data);
一旦你将哈希作为一个字节数组,你可能想要将它转换回文本 - 这应该作为十六进制或可能作为Base64,例如,使用Apache Commons Codec。
如果您尝试匹配PHP生成的SHA-1哈希,则需要找出在将字符串转换为字节时使用的编码,以及它如何表示之后哈希。
答案 1 :(得分:0)
这是我使用的。 (我从这个问题中得到了两个答案,但是为了简单起见,我认为我将它粘贴在一个答案中。)
// This replicates the PHP sha1 so that we can authenticate the same users.
public static String sha1(String s) throws NoSuchAlgorithmException, UnsupportedEncodingException {
return byteArray2Hex(MessageDigest.getInstance("SHA1").digest(s.getBytes("UTF-8")));
}
private static final char[] hex = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
private static String byteArray2Hex(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 2);
for (final byte b : bytes) {
sb.append(hex[(b & 0xF0) >> 4]);
sb.append(hex[b & 0x0F]);
}
return sb.toString();
}