我試圖實現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