我试图实现DSA签名算法,我被困在一个问题上。我使用java.security
MessageDigest
类,下面的代码:SHA散列函数给出了一个负面的输出
MessageDigest md;
md = MessageDigest.getInstance("SHA-1");
md.update(text.getBytes());
return new BigInteger(md.digest());
文本是一个随机字符串对象。问题是这段代码给了我散列的负值,这是算法不接受的。难道我做错了什么?提前致谢。
P.S.顺便说一下,我也试图在不使用BigIntegers的情况下实现DSA,这可能吗?我还没有找到小于1024和160的L和N值,所以我不知道应该使用什么值以及应该使用什么散列函数。听到这些问题的答案将非常感谢。
那么你期望什么? BigInteger只是一个byte [] w /方法。 MessageDigest和BigInteger的外部byte []表示没有接触点。 – bestsss 2011-06-15 11:52:56
@bestsss如何将摘要转换为BigInteger?也许对P.S.有任何想法。我的问题的一部分?谢谢你的回答。 – Egor 2011-06-15 12:01:17
你为什么要重新实现DSA?通常你应该使用系统提供的功能;重新实现加密是危险的,因为它可能导致微妙的安全漏洞。 – crazyscot 2011-06-15 12:04:36