如何实现lessSignificant24bytes函数?含示例及关联代码
如何实现lessSignificant24bytes函数?
函数逻辑分析
从关联代码和示例可以明确:lessSignificant24bytes的作用是从strongerHash返回的32字节SHA-256哈希结果中提取最低有效24字节(也就是哈希值的最后24个字节)。
因为SHA-256输出是32字节(对应64位十六进制字符串),取最后24字节等价于截取十六进制字符串的最后48个字符(1字节=2位十六进制)。
实现步骤
- 确认输入:
strongerHash返回的是合法的64位十六进制字符串(32字节)。 - 截取字符串的后48位,这就是24字节的最低有效部分。
- 可选:添加参数校验,确保输入长度符合要求,避免空指针或越界异常。
Java代码实现
public String lessSignificant24bytes(String hash32BytesHex) { // 校验输入是否为合法的32字节十六进制字符串(64个字符) if (hash32BytesHex == null || hash32BytesHex.length() != 64) { throw new IllegalArgumentException("输入必须是32字节的十六进制字符串(64个字符)"); } // 截取最后48个字符,对应24字节的最低有效部分 return hash32BytesHex.substring(16); }
结合示例验证
以给出的示例为例:
- 输入accountId拼接
random8Bytes(123CCB2F30BA420B)后传入strongerHash,得到32字节的十六进制哈希。 - 调用
lessSignificant24bytes截取该哈希的后48位,得到17F837DF60E2FC9D6965A74476849FCD43A640F792A2B358。 - 拼接前面的
random8Bytes,正好得到预期输出:123CCB2F30BA420B17F837DF60E2FC9D6965A74476849FCD43A640F792A2B358。
补充说明
strongerHash的逻辑是先对原始数据做5000次SHA-256迭代哈希,再将原始数据的两次SHA-256结果与迭代哈希拼接后再做一次SHA-256,最终输出32字节哈希,确保了哈希的抗碰撞性。- 实现时要注意十六进制字符串的大小写一致性,示例中使用大写,代码无需额外转换,因为SHA-256的十六进制输出大小写不影响最终结果。
内容的提问来源于stack exchange,提问作者raghad
相关产品推荐
相关产品推荐

