0

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

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

辛迪格

bytes[] shindigHash = sha(someBytes);// sha() 的文档

spring-security-oauth

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

我也尝试了默认编码,但是当我比较每个's 和' 元素时bytes[] b = str.getBytes();它并不相等。shindigHashbshindigHash

编辑

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

1 回答 1

2

getBytes()不返回哈希。它返回字符串的字节表示。所以他们永远不会对应。

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

“af45 死牛肉”

那是一个字符串。调用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[]通过将每对字符转换为 a 来将字符串转换为 a byte

于 2013-04-25T00:35:14.107 回答