gpt4 book ai didi

java - 将 SHA-512 哈希从 Java 转换为 Bash

转载 作者:行者123 更新时间:2023-12-02 05:14:28 25 4
gpt4 key购买 nike

我有一个很大的 Java 代码,它使用 SHA-512 对字符串进行哈希处理,但我无法在 Bash 中获得类似的结果。所以我决定尽可能地简化它来寻找问题,并提出了这一小段代码:

import java.math.BigInteger;
import java.security.MessageDigest;

class Test {
public static void main(String []args) throws Exception {
String SECRET = "secret";
String STRING = "string";
MessageDigest digest = MessageDigest.getInstance("SHA-512");
digest.update(SECRET.getBytes("UTF-8"));
byte[] d = digest.digest(STRING.getBytes("UTF-8"));
System.out.println(new BigInteger(1, d).toString(16));
}
}

返回:

26620758babadb008ee7b98e1bb07351f08d49228c15f6f31c4ee75cb9a26f5079b81c01f14f78cf5f9639e49d7319ee3c3fcc1f94e686b8d605c93f2ab9fb4

根据我的理解,这相当于:

#!/bin/bash

SECRET="secret"
STRING="string"

echo -n "$STRING" | openssl sha512 -hmac "$SECRET"

但这会返回:

c13223b6f7331a608ec24bf3adfd8f599622b4d5b28cd27f9dcf92430a6263f435d07ff59809785ef04c5cb4aefd02357578efc8862e254a7505e26c76806194

我唯一注意到的是,如果我更改 toString(16) 的值,结果也会发生变化。但从阅读its documentation ,我不明白它是做什么的!

最佳答案

尝试

echo -n "secretstring" | sha512sum -

我明白了

026620758babadb008ee7b98e1bb07351f08d49228c15f6f31c4ee75cb9a26f5079b81c01f14f78cf5f9639e49d7319ee3c3fcc1f94e686b8d605c93f2ab9fb4 -

(有一个前导零)。您的命令的问题在于参数 -hmac。它在这里工作

echo -n "secretstring" | openssl sha512

输出

(标准输入)= 026620758babadb008ee7b98e1bb07351f08d49228c15f6f31c4ee75cb9a26f5079b81c01f14f78cf5f9639e49d7319ee3c3fcc1f94e686b8d605c93f2 ab9fb4

最后,更改传递给 toString() 的值会更改数字的基数(或基数)。

关于java - 将 SHA-512 哈希从 Java 转换为 Bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084169/

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