gpt4 book ai didi

java - MessageDigest MD5 算法没有返回我所期望的

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:12 27 4
gpt4 key购买 nike

我脑后的某些东西告诉我,我在这里遗漏了一些明显的东西。

我正在将一个现有的 java 项目与第三方 api 集成,该 api 使用 api key 的 md5 哈希进行身份验证。它对我不起作用,在调试过程中我意识到我生成的哈希值与他们提供的示例不匹配。我发现一些网站从字符串创建 MD5 散列来检查他们的例子,据我所知,我错了,他们是对的。

例如,根据this website ,字符串“hello”生成哈希“5d41402abc4b2a76b9719d911017c592”。 (FWIW 我对这个网站一无所知,除了它似乎正确地散列了我拥有的示例)。当我通过我的代码运行它时,我得到:

XUFAKrxLKna5cZ2REBfFkg==

这是我用来生成 md5 哈希/字符串的简单方法:

private String md5(String md5Me) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
md.reset();
md.update(md5Me.getBytes("UTF-8"));

return Base64.encodeBase64String(md.digest());
}

上周我使用了一种非常相似的方法,使用 SHA1 算法成功验证了不同的 API。我想知道问题是否与 org.apache.commons.net.util.Base64.encodeBase64String 相关...非常感谢任何帮助,如果只是一些测试以查看 byteArray 是否正确但转换后的字符串是错误的.

最佳答案

for example, according to this website, the string "hello" generates a hash of "5d41402abc4b2a76b9719d911017c592". (FWIW I don't know anything about this website except that it seems to correctly hash the examples that I have). When I run it through my code I get:

XUFAKrxLKna5cZ2REBfFkg==

两者都是表示相同的 16 字节散列的正确方法。 5d41402abc4b2a76b9719d911017c592 将哈希的每个字节表示为两个十六进制数字,而 XUFAKrxLKna5cZ2REBfFkg== 使用 Base-64 将哈希的每 三个 字节表示为四个 个字符。

要生成此第三方 API 期望的十六进制版本,您可以更改此设置:

Base64.encodeBase64String(md.digest());

为此:

String.format("%032x", new BigInteger(1, md.digest()));

(大部分取自 this StackOverflow answer )。

但是,您可能需要考虑为此使用外部库。 Perception ,在上面的评论中,提到了 Apache Commons DigestUtils。如果你使用它,你会想要 the md5hex method .

关于java - MessageDigest MD5 算法没有返回我所期望的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651822/

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