2
テスト値を指定:私はRubyで0 HMACを取得しようとした場合このRFC 4226は間違っていますか? RFCの
Appendix D - HOTP Algorithm: Test Values
The following test data uses the ASCII string
"123456789" for the secret:
Secret = 0x3132333435363738393031323334353637383930
Table 1 details for each count, the intermediate HMAC value.
Count Hexadecimal HMAC-SHA-1(secret, count)
0 cc93cf18508d94934c64b65d8ba7667fb7cde4b0
1 75a48a19d4cbe100644e8ac1397eea747a2d33ab
は、だから私は得る:
[20] pry(AuthyOTP)> secret_key = "123456789"
=> "123456789"
[22] pry(AuthyOTP)> OpenSSL::HMAC.hexdigest(digest, secret_key, "0")
=> "32a67f374525d32d0ce13e3db42b5b4a3f370cce"
私はそうcc93cf18508d94934c64b65d8ba7667fb7cde4b0
を取得することが期待されました私はjavaで実装を書いたが、私は同じことを得る:
シークレットが "123456789"のとき、16進数のSHA1-HMACは "0"ですか?
あなたは正しいです....それはちょうど混乱していますが。特に、他の言語のHMAC関数はバイトではなく文字列上で動作します。 – daniel
Javaプログラマとして、他の言語が文字列とバイトの違いを理解できないかどうかは気にしません。これらのアルゴリズムはすべてバイト用に定義されているため、明示的にエンコーディングを実行する方がはるかに優れています。なぜなら、とにかく標準エンコーディングが定義されていないからです。 –
はい。私は、PHPのような言語が_everything_のために文字列を使用する方法を理解したことはありません – SLaks