小编Gui*_*mot的帖子

谷歌 OTP 生成 Java

我目前正在尝试重新创建 Google 一次性密码生成器。我使用设置 Google Authenticator 时生成的共享密钥。我尝试查看 Google Authenticator 来源和互联网上的所有内容,发现与我的代码有很多相似之处,但我真的找不到我错在哪里。第一部分似乎是正确的。至于 hmac,我认为我不会在这里搞砸,但我可能是错的。截断部分对我来说仍然有点模糊,我尝试了很多不同的实现,但我就是无法获得有效的 OTP。(我正在使用 Google Authenticator 来比较结果)

private String truncateHash(byte[] hash) {
    int offset = hash[hash.length - 1] & 0xF;

    long truncatedHash = 0;
    for (int i = 0; i < 4; ++i) {
        truncatedHash <<= 8;
        truncatedHash |= (hash[offset + i] & 0xFF);
    }

    truncatedHash &= 0x7FFFFFFF;
    truncatedHash %= 1000000;

    int code = (int) truncatedHash;
    String result = Integer.toString(code);
    for (int i = result.length(); i < 6; i++) {
        result = "0" …
Run Code Online (Sandbox Code Playgroud)

java one-time-password hmacsha1 google-authenticator

6
推荐指数
1
解决办法
3254
查看次数