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

问题描述 投票:1回答:1

我需要在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))

谢谢百万!

我需要在groovy / java应用程序中的Java中复制javascript sha256哈希。 javascript版本使用angular中包含的哈希函数,因此我无法控制它。给定相同的...

javascript java hash sha256 bytestring
1个回答
1
投票

正在做

© www.soinside.com 2019 - 2024. All rights reserved.