相关疑难解决方法(0)

Python中的Google身份验证器实现

我正在尝试使用可以使用Google身份验证器应用程序生成的一次性密码.

Google身份验证器的功能

基本上,Google身份验证器实现了两种类型的密码:

  • HOTP - 基于HMAC的一次性密码,这意味着密码随每次呼叫而改变,符合RFC4226,并且
  • TOTP - 基于时间的一次性密码,每30秒更改一次(据我所知).

Google身份验证器也可在此处以开源形式提供:code.google.com/p/google-authenticator

目前的代码

我一直在寻找能够生成HOTP和TOTP密码的现有解决方案,但没有找到太多.我的代码是负责生成HOTP的以下代码段:

import hmac, base64, struct, hashlib, time

def get_token(secret, digest_mode=hashlib.sha1, intervals_no=None):
    if intervals_no == None:
        intervals_no = int(time.time()) // 30
    key = base64.b32decode(secret)
    msg = struct.pack(">Q", intervals_no)
    h = hmac.new(key, msg, digest_mode).digest()
    o = ord(h[19]) & 15
    h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
    return h
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,我使用上述代码生成的密码与使用适用于Android的Google身份验证器应用生成的密码不同.即使我尝试了多个intervals_no值(恰好是前10000个,开头intervals_no = 0),与secretGA应用程序中提供的密钥相等.

我有问题

我的问题是:

  1. 我究竟做错了什么?
  2. 如何在Python中生成HOTP和/或TOTP?
  3. 是否有任何现有的Python库?

总结一下:请给我任何有助于我在Python代码中实现Google身份验证器身份验证的线索.

python security authentication one-time-password google-authenticator

99
推荐指数
2
解决办法
4万
查看次数

Base32解码

我有一个base32字符串,我需要将其转换为字节数组.我在.NET框架中找到转换方法时遇到了麻烦.我可以找到base64的方法,但不能找到base32的方法.

Convert.FromBase64String - 像base32这样的东西是完美的.

在框架中是否有这样的方法或者我必须自己滚动?

.net c# base32

32
推荐指数
5
解决办法
4万
查看次数