gpt4 book ai didi

java - 无法在 Java 中输出正确的散列。怎么了?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:50 25 4
gpt4 key购买 nike

在我的 Android 应用程序中,我有一个 SHA256 散列,我必须使用 RIPEMD160 消息摘要算法对其进行进一步散列。

我可以输出任何字符串的正确 sha256 和 ripemd160 散列,但是当我尝试使用 ripemd160 散列 sha256 散列时,我得到一个不正确的散列。

根据在线哈希计算器,字符串“test”(全部小写)的 SHA256 值为:

9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

字符串 'test' 的 RIPEMD160 值为:

5e52fee47e6b070565f74372468cdc699de89107

根据在线计算,使用 ripemd160 对生成的 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算法,sha256需要bouncycaSTLe和java.security.MessageDigest。

最佳答案

您的“在线计算器”结果是使用 SHA-256 对字符串“test”的字节进行哈希处理,将哈希结果转换为十六进制字符串,然后获取与该十六进制的 ASCII 字符对应的字节的结果字符串并再次对它们进行哈希处理。这与您的 Java 代码非常不同,Java 代码将来自第一个散列的字节直接传递给第二个散列,而不将它们打印为十六进制并将这些字符转换回中间的字节。值为 254(十进制)的单字节变为十六进制的“fe”,转换回字节后变为两字节序列 [0x66, 0x65]。

关于java - 无法在 Java 中输出正确的散列。怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12303567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com