javascript - 如何在 Java 中复制 javascript sha256 哈希并获得相同的十六进制输出?

标签 javascript java hash sha256

我需要在我的 groovy/java 应用程序中复制 java 中的 javascript sha256 哈希。

javascript 版本使用了 angular 中包含的哈希函数,我无法控制它。给定相同的输入字符串,我需要提供相同的十六进制输出。

在 Java 中,我使用 https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html

在Java中:

DigestUtils.sha256(cx2 + username):

给我一​​个字节串,打印成:

[-114, -15, 57, -56, 81, 37, -95, 119, 102, 81, 63, 99, -3, -56, -116, -110, -114, -16, -18, 117, 118, 49, -120, 14, 68, 30, -37, 20, -70, -17, -19, -88]

在 java 脚本中:

var s1 = Sha256.hash(cx2 + username)

给我一​​个字节串(Javascript 的类型会说它是一个字符串)打印如下(不确定那是什么编码):

ñ9ÈQ%¡wfQ?cýÈðîuv1DÛºïí¨

如果我将两个字节串都转换为十六进制,我在 java 和 javascript 中得到相同的结果:

console.log Sha256.toHexStrfromByteStr(s1)
// 478972ab3380187060494987ac7c597ac92decdac1c04dd1dcab8184995ec01b

就是这样,除了 javascript 代码执行第二个哈希将字节串连接到另一个字符串:

var s2 = Sha256.hash(cx1 + s1)

当我尝试在 Java 中复制第二个散列时,我得到了一个非常不同的输出(在将两个输出都转换为十六进制之后)。

def s2 = DigestUtils.sha256(cx1 + s1)

有没有我遗漏的步骤?

import org.apache.commons.codec.digest.DigestUtils

String cx2 =  'Potato'
String cx1 = 'Bread'

def s1 = DigestUtils.sha256(cx2 + 'username')  
def s2 = DigestUtils.sha256Hex(cx1 + s1)

println s2

Javascript

var s1 = Sha256.hash(cx2 + 'username');
var s2 = Sha256.hash(cx1 + s1);

console.log (Sha256.toHexStrfromByteStr(s2))

感谢一百万!

最佳答案

通过做

def s1 = DigestUtils.sha256(cx2 + 'username')

结果 s1类型为 byte[] .然后,通过做

def s2 = DigestUtils.sha256Hex(cx1 + s1)

您正在连接 <byte []>.toString() 的结果至 cx1 .

您必须改为:

a) 转换 s1到“正常”字符串 - new String(s1) - 并连接两个字符串,或者
b) 转换 cx1byte[]并连接两个数组。

关于javascript - 如何在 Java 中复制 javascript sha256 哈希并获得相同的十六进制输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60549674/

相关文章:

javascript - 等待 mysql 数据库查询完成后再继续

javascript - PHP 未从 XMLhttprequest 接收数据

java - 如何在 Java 中使用 wait() 和 notify()?

ruby - 将数组的值加到哈希中

c++ - 对于英语单词来说,什么是好的哈希函数?

javascript - 通过正则表达式进行 JSON 路由匹配

Adobe PDF 中的 JavaScript 执行

Multimap 中的 Java 泛型删除

java - 如何向Java静态ArrayList添加元素

c++ - 专门的哈希表c++