java – SHA哈希函数给出负输出

我正在尝试实施DSA签名算法而且我遇到了问题.我正在使用java.security MessageDigest类,这里是代码:

MessageDigest md;
md = MessageDigest.getInstance("SHA-1");
md.update(text.getBytes());
return new BigInteger(md.digest());

Text是一个随机的String对象.问题是这段代码给出了哈希的负值,这是算法不接受的.难道我做错了什么?提前致谢.

附:顺便说一下,我也试过在不使用BigIntegers的情况下实现DSA,这可能吗?我没有发现L和N值小于1024和160,所以我不知道应该采用什么值以及我应该使用什么哈希函数.非常感谢听到这些问题的答案.

解决方法:

MessageDigest md;
md = MessageDigest.getInstance("SHA-1");
md.update(text.getBytes());
return new BigInteger(1, md.digest()); // use this 1 to tell it is positive.

然后,您可以使用以下方法将哈希值转换为String:

String hash = biginteger.toString(16);

然后可选地前置前导零.

String zeros = String.format("%032d", 0);
hash = zeros.substring(hash.length()) + hash;
上一篇:c# – .net中Sha256的更新功能在哪里?


下一篇:php – 哪个更好:sha1_file(f)或sha1(file_get_contents(f))?