java php sha1函数

时间:2011-04-19 05:19:04

标签: java php sha1

java中的sha1函数的替代是什么

就像在php中一样

sha1("here is string"); 

java中的内容

2 个答案:

答案 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();
}