gpt4 book ai didi

java - 字符串到字节到 Big Int 转换 VICE VERSA 错误

转载 作者:行者123 更新时间:2023-12-02 03:50:14 26 4
gpt4 key购买 nike

我正在尝试将哈希值转换为大整数,以便我可以用它进行一些计算。我在这方面取得了成功,但另一方面,我需要能够将大整数转换回哈希值以进行验证。但我无法成功转换回来,下面是我的代码和输出。请提供建议和协助..

这是代码

//convert hash to bytes then to big int to mod pow
BigInteger hashy = new
BigInteger(hash.getBytes(StandardCharsets.ISO_8859_1));
System.out.println("hashy: " +hashy);
//test if convert back to big int works
String convertedBackHash = (hashy.toByteArray()).toString();
System.out.println("hash to hashy to hash: " + convertedBackHash);

这是输出

hash: d1bb961ac85f6d9ae66b469b5cabe83f9f88e4ee
hashy: 835979497806227327262557895525398820611883198135120938003873334575862278693562754177889725605221
hash to hashy to hash: [B@60e53b93

有人知道出了什么问题吗?

最佳答案

对于加密函数,您通常需要将字节数组(哈希)转换为整数并返回。这可以通过将字节数组视为常量大小、无符号、大端整数来完成。

PKCS#1 为 RSA 计算指定了这一点,例如,其中 OS2IP(八位字节字符串到整数原语)从字节数组转换为整数,而 I2OSP(整数到八位字节字符串原语)从整数转换回八位字节字符串。八位字节字符串只不过是一个字节数组。两者的实现都不是特别棘手,但事实上 Java 没有内置该函数(提示!)并且 Java 无法调整数组大小,这使得 I2OSP 比您想象的更加棘手。幸运的是我已经提供了答案here - 我花了一些时间才再次找到它。

现在您的输入哈希似乎是十六进制编码的。这不是您想要转换为整数的值。您希望将字节数组表示的字节转换为整数。因此,您首先需要对字节进行十六进制解码。有很多库可以实现十六进制编码,Stackoverflow 上也有答案。相反,在 I2OSP 之后,如果您想查看字节,则需要将字节编码回十六进制。这样您也只需处理一半大小的整数。

所以BigInteger i = os2ip(Hex.decode(hashString)),然后用i做一些事情,当你再次得到它时,String hashString = Hex.encodeToString(i2osp(i)).

关于java - 字符串到字节到 Big Int 转换 VICE VERSA 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47303099/

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