Python生成Google Authenticator密钥如何避免b32encode输出含'='符号
Base32密钥去除=符号的解决方案
=是Base32编码的标准末尾填充字符,HOTP/TOTP的官方规范允许直接省略该填充符,不会影响密钥的有效性与安全性。iPhone端Google Authenticator仅支持无填充的Base32密钥,因此直接移除填充符即可解决兼容问题。
实现方式1:生成后直接移除填充符
对原有代码做最小改动,直接删除编码结果末尾的所有=即可:
import os from base64 import b32encode # 生成无填充的Base32密钥 secret = b32encode(os.urandom(16)).decode().rstrip('=')
实现方式2:使用专用TOTP库生成
如果你在使用PyOTP这类二次封装的TOTP库,可以直接调用内置的密钥生成方法,天然输出无填充的兼容密钥:
import pyotp # 生成符合全端Google Authenticator规范的密钥 secret = pyotp.random_base32()
注意事项
- 仅可删除末尾的
=填充符,不可修改密钥的其他字符,否则会导致密钥完全失效 - 随机源保持16字节即可,对应无填充的Base32编码长度为32字符,符合安全规范要求
内容的提问来源于stack exchange,提问作者icemelting
相关产品推荐
相关产品推荐

