发布于 2019-08-02 11:38:58
使用Base32的原因是为了避免人为错误。它与空间无关,中没有提到Base32是因为它与私钥、HMAC和令牌生成无关。Base32仅用于以人类可读的形式传递私钥。
更多细节,如果有兴趣的话。
TOTP中的私钥应该是一个20字节(160位)的秘密。私钥与HMAC-SHA1 1一起用于编码划时代时间计数器。从遗传的160位HMAC中提取令牌。
但是,将这个秘密输入像Google身份验证这样的工具是不容易的。好的,有一个QR代码可以从一个网站收集这个私钥,但是这个特性并不总是可用的。
因此,当您必须输入这个私钥时,您可以以Base32格式与用户共享,即将密钥编码为生成Base32字符串。
,那么为什么在这种情况下Base32比Base64更好呢.
Base32存在的一个重要而简单的原因是它只使用A大写(没有小写)和数字2-7。第0189号26 +6字符= 32
没有小写字母,也没有数字0189,所以"i“"l”"I“和"1”没有混淆。只有I. B和8之间的混淆,0和O也被消除。
如果输入0,它可以被视为OA1作为一个I等。无论工具试图自动纠正,或我的偏好,只是告诉用户无效的条目是一个品味的问题。但清楚的是,人为错误对字符串的非唯一解释明显减少了.Base64的情况并非如此。
以上所有问题,加上大小写和数字混淆,都适用于Base64。
发布于 2018-05-25 12:01:22
我相信这只是一个历史背景。一开始有人选择了Base32,一个工具变得流行起来,后代使用相同的编码来遵守。
我还看到了许多使用十六进制格式的实现,提供的RFC6238中的示例也使用十六进制。
https://stackoverflow.com/questions/50082075
复制相似问题