将一串数字生成的 hash-256 转换为 Java 中的 64/32 位唯一数字
Convert hash-256 generated from an string of digits to 64/32 bit unique number in Java
我有一个帐号作为字符串 ex:“98932849294322”,我对其执行 256 哈希调用 DigestUtils.sha256Hex(value) returns 一个 64 字符编码的字符串。现在我想将 256 值转换为来自 64 字节十六进制或来自 sha-256 的原始二进制的数字。
我的目的是拥有一个新号码,我可以用它来引用应该一对一映射到新号码的原始帐号。
我的两个问题是:
1- 我需要调用什么函数才能从值中获取数字
从 sha256 调用返回。
2- 会不会是来自
1)中获得的数字。假设我有两个账户“1245”和“6543”
他们会生成相同的散列因此得到相同的
来自两个不同帐号的 1) 中的号码?
谢谢
是和否。
不。
问题是两个不同的字符串可以呈现相同的 SHA 值。因此,仅使用 SHA 是不可能的。
是的。
但是,如果我对原始字符串执行额外的算法操作,并且考虑到字符串的长度有限 (12),我可以生成一个 32 位数字并使用类似移位运算符的东西,然后在字符串上填充我的自定义算法的结果并填充 32 个额外位以生成唯一的 64 位数字。
我有一个帐号作为字符串 ex:“98932849294322”,我对其执行 256 哈希调用 DigestUtils.sha256Hex(value) returns 一个 64 字符编码的字符串。现在我想将 256 值转换为来自 64 字节十六进制或来自 sha-256 的原始二进制的数字。 我的目的是拥有一个新号码,我可以用它来引用应该一对一映射到新号码的原始帐号。 我的两个问题是:
1- 我需要调用什么函数才能从值中获取数字 从 sha256 调用返回。
2- 会不会是来自 1)中获得的数字。假设我有两个账户“1245”和“6543” 他们会生成相同的散列因此得到相同的 来自两个不同帐号的 1) 中的号码?
谢谢
是和否。 不。 问题是两个不同的字符串可以呈现相同的 SHA 值。因此,仅使用 SHA 是不可能的。 是的。 但是,如果我对原始字符串执行额外的算法操作,并且考虑到字符串的长度有限 (12),我可以生成一个 32 位数字并使用类似移位运算符的东西,然后在字符串上填充我的自定义算法的结果并填充 32 个额外位以生成唯一的 64 位数字。