HOTP の手動 HMAC SHA-1 切り捨てをカウントしようとしていますが、ソース コードでカウントした場合と同じ結果が返されません。たとえば、HMAC SHA-1 を次のように生成するコードがあります。
$hash = hash_hmac('sha1','375317186160478973','test');
それは私に HMAC = c359e469b8ef0939f83e79a300b20a6ef4b53a05 を与えるでしょう
[19] 個の配列に分割すると、次のようになります。
c3 59 e4 69 b8 ef 09 39 f8 3e 79 a3 00 b2 0a 6e f4 b5 3a 05
最後の配列から 05 (バイナリで 101) を取得し、その後 101 & 0xf = 5 を実行します
だから私は5番目の配列から数えます ef (11101111) 09 (1001) 39 (111001) f8 (11111000)
その後、 (((11101111) & 0x7f) << 24) | を実行します。(((1001) & 0xff) << 16) | (((111001) & 0xff) << 8) | ((11111000) & 0xff)) % pow (10,6)
次のような結果が得られます:56024
しかし、このコードを使用すると:
$offset = ($hash[19]) & 0xf;
$otp = (((($hash[$offset + 0]) & 0x7f) << 24) |
((($hash[$offset + 1]) & 0xff) << 16) |
((($hash[$offset + 2]) & 0xff) << 8) |
(($hash[$offset + 3]) & 0xff)) % pow(10, 6);
次のような結果が得られます:599808
配列からの値として 2 進値または 10 進値を書き込むと、同じ異なる結果が表示されます。誰かが私の過ちを説明するのを手伝ってくれるので、マニュアルとソースコードを数えて、HOTP の同じ値を得ることができます。ありがとうございました