我试图用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);
谢谢。
答案 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)
代替。