我需要在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中包含的哈希函数,因此我无法控制它。给定相同的...
正在做