首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该计算一个令牌的原始字节的SHA-256散列,还是它的十六进制编码?

我应该计算一个令牌的原始字节的SHA-256散列,还是它的十六进制编码?
EN

Cryptography用户
提问于 2021-02-12 15:24:55
回答 1查看 780关注 0票数 1

我有一个系统,我应该为用户生成一个秘密令牌。令牌的存在足以授予对某些与用户相关的数据的访问权限。

我正在从加密安全的随机数生成器中生成一个4096位令牌。在内部,我将令牌处理为字符串,编码为十六进制。令牌使用SHA-256进行散列,并且存储在数据库中,表示令牌的十六进制字符串被发送给用户,并且从不存储。

当用户显示令牌的十六进制字符串时,我计算它的SHA-256散列并查找它。

问题是:我是通过计算十六进制编码字符串的SHA-256与计算原始字节有效负载的散列来牺牲某些东西吗?我是用Go编写的,所以我真的在计算[]byte(str)的SHA-256散列,它将字符串转换为字节数组。

我有一种感觉,也许我把苹果和橘子比作西瓜。

我是否应该从用户那里获得十六进制编码的字符串,将其转换为字节数组,使用SHA-256进行散列,然后使用它呢?

问题1-a:如果是base64url而不是十六进制,事情会改变吗?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2021-02-12 16:05:50

编码不会改变熵源的输出。它们是可逆的操作。您可以使用适合您的编码,更改为base64进行传输,并在数据库上进行强传输,而更改为字节是一个很好的选择,因为密码散列函数通常接受字节来处理,所以在应用SHA-256之前最好将它们转换成字节,这样您就可以从SHA-256的速度中获益。Base64或Hex可能需要更多的时间来散列相同的数据,这是因为长度的增加,即Base64中的~3n/4n字节的2n

如果CSPRNG有很好的熵,那么你甚至不需要SHA-256,或者至少4096位令牌,散列源的输出是个好主意,但是,如果源需要4096位才能产生良好的256位随机性,那么可能会出现问题。然而,这确实取决于您的CSPRNG。

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

https://crypto.stackexchange.com/questions/88203

复制
相关文章

相似问题

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