gpt4 book ai didi

python - Python 3 中的 Google OAuth 错误

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:41 25 4
gpt4 key购买 nike

我关注了this awesome answer用于在 Python 中实现 Google OAuth。但是,当我尝试在 Python 3 中运行时,出现以下错误:

TypeError: ord() expected string of length 1, but int found

此错误是由这一行引发的:

o = ord(h[19]) & 15

尝试o = ord(str(h[19])) & 15结果是:

TypeError: ord() expected a character, but string of length 3 found

这种情况发生在 Python 3 中,但不会发生在 Python 2 中,这让我认为某些类型在版本之间发生了变化。这是相关代码:

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 = ord(h[19]) & 15
h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
return h

我试图关注this question的答案,但没有帮助。第一个答案没有帮助,因为我没有使用 key 的字符串文字或msg 。这是我尝试实现第二个答案的建议:

def get_hotp_token(secret, intervals_no):
key = base64.b32decode(secret)
key_bytes = bytes(key, 'latin-1')

msg = struct.pack(">Q", intervals_no)
msg_bytes = bytes(msg, 'latin-1')

h = hmac.new(key_bytes, msg_bytes, hashlib.sha1).digest()
o = ord(h[19]) & 15
h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
return h

此代码在 key_bytes = <...> 上引发了此错误和msg_bytes = <...> :

TypeError: encoding without a string argument

使用utf-8而不是latin-1得到了相同的结果。

如果我print(key, msg) ,我明白了,这表明它们已经是类似字节的形式:

b'fooooooo37' b'\x00\x00\x00\x00\x02\xfa\x93\x1e'

msg打印说明 ... string of length 3 found上面的错误。

<小时/>

我不确定从这里该去哪里。任何建议/解决方案都会很棒!

最佳答案

hmac.new() 返回一个字节字符串。在 Python 3 中,这是一个整数数组。因此h[19]是一个整数。只需使用该 int 而不是调用ord() 。或者将 h 解码为 str。

关于python - Python 3 中的 Google OAuth 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934560/

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