gpt4 book ai didi

java - 比较 bytes[] 和 String.getBytes()

转载 作者:行者123 更新时间:2023-12-02 07:05:06 26 4
gpt4 key购买 nike

我正在调试 OAuth 的自定义实现(shindigspring-security-oauth 库)。

无论 shindig 和 spring-security 细节如何,我都会使用 sha() 创建一个哈希,然后将其传递给 spring-security-oauth。我希望哈希值相等,但事实并非如此。

盛会

bytes[] shindigHash = sha(someBytes);//docs for sha()

spring-security-oauth

bytes[] b = str.getBytes("UTF-8");` // String str passed in from 

我还尝试了 bytes[] b = str.getBytes(); 作为默认编码,但当我比较每个 时,它不等于 shindigHash >bshindigHash 的元素。

编辑

for j = 0 .. b.length // same as shindigHash length
print shindigHash[j] ... b[j]
end
visually compare results

最佳答案

getBytes() 不返回哈希值。它返回字符串的字节表示形式。所以他们永远不会通信。

SHA-1(或其他哈希值)的一种可能表示是一串十六进制数字。

“af45deadbeef”

这是一个字符串。对其调用 getBytes() 不会返回哈希值。为什么?

好吧,考虑一个简单的哈希:

000000000000000

这是一堆零字节。 byte[] 将为 { 0, 0, 0, ... }

但是,

"00000000000000".getBytes("utf-8")

将返回

 { 30, 30, 30, 30, 30, 30 .... } /* those are hex 30's */

“0”的 UTF-8 表示是 0x30,而不是 0x00。

因此,如果字符串包含哈希的十六进制表示形式,那么您需要将 byte[] 转换为包含其十六进制表示形式的字符串,或者将字符串转换为 byte[] 通过将每对字符转换为字节

关于java - 比较 bytes[] 和 String.getBytes(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16204340/

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