0

OAuth (shindigおよびspring-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 

デフォルトのエンコーディングも試してみましたが、と の各要素を比較すると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 (またはその他のハッシュ) の可能な表現の 1 つは、16 進数の文字列です。

「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 表現は 0x00 ではなく 0x30 です。

したがって、文字列にハッシュの 16 進表現が含まれている場合は、 をその 16 進表現を含む文字列に変換するか、文字の各ペアを に変換byte[]して文字列を に変換する必要があります。byte[]byte

于 2013-04-25T00:35:14.107 に答える