首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TOTP Base32对Base64

TOTP Base32对Base64
EN

Stack Overflow用户
提问于 2018-04-28 23:50:22
回答 2查看 5.8K关注 0票数 10

我发现每个TOTP实现(甚至FreeOTP由RedHat实现)都使用Base32编码/解码,因为它是生成的秘密。为什么没有使用Base64,因为Base32使用的空间大约多了20 %,它的主要优点是它更具可读性。无论如何,它都不会显示给用户。

虽然实现中的每一个注释都说它的实现遵循RFC6238 / RFC4226,但我在RFC文档中找不到任何关于Base32的评论。

显然,由于数据传输的安全性,将其转换为Base32或Base64是有意义的,但是为什么不直接使用Base64呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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。

票数 16
EN

Stack Overflow用户

发布于 2018-05-25 12:01:22

我相信这只是一个历史背景。一开始有人选择了Base32,一个工具变得流行起来,后代使用相同的编码来遵守。

我还看到了许多使用十六进制格式的实现,提供的RFC6238中的示例也使用十六进制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50082075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档