在我的 Android 应用程序中,我有一个 SHA256 哈希值,我必须使用 RIPEMD160 消息摘要算法进一步对其进行哈希处理。
我可以输出任何字符串的正确 sha256 和ripemd160 哈希值,但是当我尝试用ripemd160 对sha256 哈希值进行哈希处理时,我得到一个不正确的哈希值。
根据在线哈希计算器,字符串“test”(全部小写)的 SHA256 值为:
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
字符串 'test' 的 RIPEMD160 值为:
5e52fee47e6b070565f74372468cdc699de89107
根据在线计算,使用成熟的 sha256 散列哈希得到的值是:
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 for sha256。