在md5上获得负值

时间:2012-02-28 11:22:12

标签: java md5

我试图用java获取MD5并且我收到负值。 MD5可以导致负值吗?

这是我的代码:

        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] sigBytes = md5.digest((sharedSecret+"api_key"+API_KEY).getBytes());
        api_sig = new BigInteger(sigBytes).toString(16);

谢谢。

3 个答案:

答案 0 :(得分:2)

new BigInteger(sigBytes)将您的签名解释为有符号整数,所以是的,可能会得到一个负数。如果您希望您的字符串包含md5值的十六进制表示,请在此处查看一些答案:How can I generate an MD5 hash?

答案 1 :(得分:0)

我使用以下方法获取正确的MD5哈希字符串(它从未给我“负”值):

public static String createMD5Hash(String input) {
    try {
        MessageDigest m = MessageDigest.getInstance("MD5");
        byte[] out = m.digest(input.getBytes());
        return new String(Base64.encodeBase64(out));
    } catch (NoSuchAlgorithmException e) {
        return null;
    }
}

请注意,Base64是来自apache commons的类:

import org.apache.commons.codec.binary.Base64;

答案 2 :(得分:0)

jbowes所提到的,new BigInteger(sigBytes)将签名解释为有符号整数(意味着第一位表示数字是正数还是负数)。如果您希望它将字节解释为无符号数,则应使用new BigInteger(1, sigBytes)代替。