私のAndroidアプリには、SHA256ハッシュがあり、RIPEMD160メッセージダイジェストアルゴリズムでさらにハッシュする必要があります。
任意の文字列の正しいsha256およびripemd160ハッシュを出力できますが、sha256ハッシュをripemd160でハッシュしようとすると、正しくないハッシュが取得されます。
オンラインハッシュ計算機によると、文字列'test'(すべて小文字)のSHA256値は次のとおりです。
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
また、文字列'test'のRIPEMD160値は次のとおりです。
5e52fee47e6b070565f74372468cdc699de89107
オンライン計算に従って、結果の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アルゴリズムの場合、sha256にはbouncycastleとjava.security.MessageDigestが必要です。