我正在实施 OTP Google Acc。兼容的。
到目前为止,我一直在使用
-RFC2104(http://www.ietf.org/rfc/rfc2104.txt),
-RFC4226(http://www.ietf.org/rfc/rfc4226.txt),
-RFC6238(https://www.rfc-editor.org/rfc/rfc6238),并遵循此架构:
[伪代码时间 OTP] ( http://en.wikipedia.org/wiki/Google_Authenticator#Pseudocode_for_Time_OTP )
function GoogleAuthenticatorCode(string secret)
key := base32decode(secret)
message := floor(current Unix time / 30)
hash := HMAC-SHA1(key, message)
offset := value of last nibble of hash
truncatedHash := hash[offset..offset+3] //4 bytes starting at the offset
Set the first bit of truncatedHash to zero //remove the most significant bit
code := truncatedHash mod 1000000
pad code with 0 until length of code is 6
return code
直到“ hash := HMAC-SHA1(key, message) ”一切正常。我通过其他 HMAC-SHA1 转换器多次检查了结果。(嗯,我想是的)。
但是,我认为一定有问题......因为显然我没有得到与我的 google-authenticator 应用程序(android)相同的代码。(至少它仍然是一个 6 位数的值)。
我不太确定能很好理解的部分是:
offset := value of last nibble of hash
truncatedHash := hash[offset..offset+3] //4 bytes starting at the offset
Set the first bit of truncatedHash to zero //remove the most significant bit
有人可以给我一个更详细的解释吗?
谢谢,