gpt4 book ai didi

python - 难以将 Python3 获取 hotp/totp token 代码转换为 Swift3

转载 作者:可可西里 更新时间:2023-11-01 02:02:40 27 4
gpt4 key购买 nike

最近我发现this awesome 2-factor authentication code generator用 Python 3 编写。我试图将它转换为 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

func getHotpToken(secret: String) -> [Int] {
let data = secret.base32DecodedData
<...>
return theTokens
}

我尝试阅读关于struct.pack 的文档 here并阅读包装实际上是什么 here ,但我仍然觉得概念/实现令人困惑,而且我不知道 Swift 中的等价物是什么。

根据文档,struct.pack 返回给定格式的字符串。在我的例子中,格式是 >Q,这意味着字节顺序是 little-endian,C 类型是 unsigned long long。同样,我不太确定这在 Swift 中应该是什么样子。

... 那只是第二行!我真的不明白如何HMAC有效(我什至找不到实际的“背景”代码),所以我什至无法翻译整个功能。我找不到任何具有这种行为的 Swift native 库。

非常感谢任何指点或帮助翻译此函数!

附言我检查了一下,我认为这是 on topic

相关导入:

import base64, struct, hmac

最佳答案

我刚刚将我的代码转换为 Swift 3。这与 Python 版本略有不同,因为它更像是一种框架类型的东西。得到 get_hotp_token 需要大量的实验工作(例如维基百科页面说它使用 SHA256 但它实际上使用 SHA1。

你可以找到它here .

当你使用它时,一定要添加一个带有 #import <CommonCrypto/CommonHMAC.h> 的桥接头

尽情享受吧!

关于python - 难以将 Python3 获取 hotp/totp token 代码转换为 Swift3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45203246/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com