用非十六进制字母字符替换 sha-256 哈希中的数字在密码学上是不是安全?

Posted

技术标签:

【中文标题】用非十六进制字母字符替换 sha-256 哈希中的数字在密码学上是不是安全?【英文标题】:Is it cryptographically secure to replace the numbers in a sha-256 hash with non hex alpha characters?用非十六进制字母字符替换 sha-256 哈希中的数字在密码学上是否安全? 【发布时间】:2021-12-12 01:08:27 【问题描述】:

这里是一个相当简单的问题,但我想确保我没有想到这个问题的某些方面,这使得这是一个糟糕的想法。

假设我有一个 SHA-256 哈希:7fe3add3b08cf7efd042771ca4c6987a37db9f9cc253a40e741dfe8b04d3b19b

将散列中的每个数字替换为不在散列中的非十六进制(非 a-f)字母字符是否更不安全、容易发生冲突或有任何其他缺点?即替换 0-9 => g-p?在这种情况下,将哈希转换为: nfejaddjbgocfnefdgkinnhcakcmponajndbpfpcciljakgenkhdfeobgkdjbhpb

从理论上讲,我不会立即看到这会降低安全性,但无法找到任何有关在线执行此类操作的真实信息。

【问题讨论】:

【参考方案1】:

您建议的 1:1 字符映射不会在原始哈希中添加或删除任何信息,并且在功能上与原始哈希相同(例如,同样安全)。这些修改后的散列基本上具有与原始散列相同的所有属性,只是使用了一组不同的 16 个字符。

我能想到的主要缺点是引入这些“仅 alpha”哈希可能会令人困惑,因为它们显然是非标准的,特别是如果它们与没有替换数字字符的哈希混合时。根据您与这些哈希交互的方式,处理它们的代码可能需要“了解”数字是否已被替换,从而在原本不会被替换的情况下引入更多复杂性。

【讨论】:

以上是关于用非十六进制字母字符替换 sha-256 哈希中的数字在密码学上是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:将 SHA256 哈希字符串转换为 SecCertificate

Oracle SQL 将十六进制值选择为 SHA256

Sha256 输出长度对我来说毫无意义

如何在Mason代码中创建字符串的SHA-256哈希?

使用 Crypto++ 生成 SHA256 哈希,使用字符串作为输入和输出?

SHA-256 的消息大小是不是有限制?