很难将Python3 get hotp/totp令牌代码转换为Swift3

2024-06-07 03:18:38 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我发现了用python3编写的this awesome 2-factor authentication code generator。我试图将其转换为Swift 3,但有一个特定部分出现问题:

def get_hotp_token(secret, intervals_no):
    key = base64.b32decode(secret)
    msg = struct.pack(">Q", intervals_no)
    h = hmac.new(key, msg, hashlib.sha1).digest()
    o = h[19] & 15
    h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
    return h

到目前为止,我只能使用here中的代码来完成函数体的第一行:p

^{pr2}$

我试图阅读关于struct.packhere的文档,并阅读关于包装实际上是here的文档,但我仍然发现这个概念/实现令人困惑,我不知道Swift中的等价物是什么。在

根据文档,struct.pack返回给定格式的字符串。在我的例子中,格式是>Q,这意味着字节顺序是little-endian,C类型是unsigned long long。再说一次,我不太清楚这在斯威夫特是什么样子。在

。。。这只是第二行!我不太明白^{}是如何工作的(我甚至找不到真正的“背景”代码),所以我甚至不能翻译整个函数。我找不到任何有这种行为的Swift本地库。在

任何提示或帮助翻译此功能将不胜感激!在

我查过了,我认为这是on topic

相关进口:

^{3}$

Tags: key函数no代码文档secrethere格式
1条回答
网友
1楼 · 发布于 2024-06-07 03:18:38

我刚把代码转换成Swift 3。这与Python版本略有不同,因为这更像是一种框架类型的东西。为了让get_hotp_token正常工作,需要进行大量的实验(例如,Wikipedia页面说它使用SHA256,但实际上它使用的是SHA1。在

你可以找到它here。在

使用此选项时,请确保使用#import <CommonCrypto/CommonHMAC.h>添加桥接头

享受吧!在

相关问题 更多 >