最近我发现了用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.pack
here的文档,并阅读关于包装实际上是here的文档,但我仍然发现这个概念/实现令人困惑,我不知道Swift中的等价物是什么。在
根据文档,struct.pack
返回给定格式的字符串。在我的例子中,格式是>Q
,这意味着字节顺序是little-endian
,C类型是unsigned long long
。再说一次,我不太清楚这在斯威夫特是什么样子。在
。。。这只是第二行!我不太明白^{
任何提示或帮助翻译此功能将不胜感激!在
我查过了,我认为这是on topic
相关进口:
^{3}$
我刚把代码转换成Swift 3。这与Python版本略有不同,因为这更像是一种框架类型的东西。为了让
get_hotp_token
正常工作,需要进行大量的实验(例如,Wikipedia页面说它使用SHA256,但实际上它使用的是SHA1。在你可以找到它here。在
使用此选项时,请确保使用
#import <CommonCrypto/CommonHMAC.h>
添加桥接头享受吧!在
相关问题 更多 >
编程相关推荐