在我的Android應用程序中,我有一個SHA256散列,我必須進一步散列RIPEMD160消息摘要算法。無法在Java中輸出正確的散列。哪裏不對?
我可以輸出正確的SHA256和任何字符串的RIPEMD160哈希值,但是當我試圖用哈希我RIPEMD160得到一個哈希這是不正確的SHA256哈希值。
據網上散列運算,字符串 '測試'(全部小寫)的SHA256值:
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
和字符串 '測試' 的RIPEMD160值:
5e52fee47e6b070565f74372468cdc699de89107
從根據網上Calcs(計算)散列所得散列SHA256與RIPEMD160的值是:
4efc1c36d3349189fb3486d2914f56e05d3e66f8
和我的應用程序給我的是:
cebaa98c19807134434d107b0d3e5692a516ea66
這顯然是錯誤的。
這裏是我的代碼:
public static String toRIPEMD160(String in)
{
byte[] addr = in.getBytes();
byte[] out = new byte[20];
RIPEMD160Digest digest = new RIPEMD160Digest();
byte[] sha256 = sha256(addr);
digest.update(sha256,0,sha256.length);
digest.doFinal(out,0);
return getHexString(out);
}
public static byte[] sha256(byte[] data)
{
byte[] sha256 = new byte[32];
try
{
sha256 = MessageDigest.getInstance("SHA-256").digest(data);
}
catch(NoSuchAlgorithmException e)
{}
return sha256;
}
對於RIPEMD160算法,你需要BouncyCastle的和java.security.MessageDigest中的SHA256。
在這段代碼中,什麼是'base64Sha256'? – Dan
@丹A錯字。它已被修復。 – Brian