You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSPRNG字节与低熵哈希异或后的熵值分析及计算问询

关于Mixed熵值的问题解答

先给你一个明确的结论:mixed的熵值完全等于rand的256比特,并没有更低。下面我一步步拆解原因:

先理清几个关键前提

  • 首先,rand是CSPRNG输出的256位数据,熵值完美256比特——这意味着它是完全均匀分布的:每一个可能的256比特组合出现的概率都是1/(2^256),没有任何可预测性。
  • 其次,hash是固定的!因为你是对固定文本"password"做SHA256哈希,而SHA256是确定性函数——输入相同,输出必然相同。所以hash本质上就是一个已知的、没有任何随机性的常数,它的熵值是0。

异或固定常数不会改变熵值

当你把一个均匀随机的数和固定常数做异或时,这个操作是一一对应的可逆变换:

  • 比如rand取某个值r,mixed就是r ^ hash;反过来,只要拿到mixed的值m,用m ^ hash就能还原出原本的r。
  • 这种一一映射意味着mixed的概率分布和rand完全一样:每个256比特组合出现的概率还是1/(2^256),所以它的熵值自然和rand一样,都是256比特。

补充:如果hash有随机性的情况(额外说明)

要是hash不是固定常数,而是带有一定熵值的随机变量,并且和rand相互独立,那异或后的熵值公式会是:
H(rand ^ hash) = H(rand) + H(hash) - I(rand; rand ^ hash)
不过因为rand是均匀分布的,最终这个式子会简化成H(rand ^ hash) = H(rand)——也就是说,只要rand是完美均匀的,不管和它异或的变量熵值如何(只要独立),结果的熵值都等于rand的熵值。

完整示例代码

这里给你补全你提供的代码,方便直观验证:

#!/usr/bin/python3
import hashlib, os

def main():
    # 获取256位CSPRNG随机字节
    rand_bytes = os.urandom(32)
    # 计算固定文本"password"的SHA256哈希
    hash_bytes = hashlib.sha256(b"password").digest()
    # 逐字节异或得到mixed
    mixed_bytes = bytes(r_byte ^ h_byte for r_byte, h_byte in zip(rand_bytes, hash_bytes))
    
    # 验证可逆性:mixed异或hash可以还原出原始rand
    assert bytes(m_byte ^ h_byte for m_byte, h_byte in zip(mixed_bytes, hash_bytes)) == rand_bytes
    print("验证通过:mixed与hash异或可还原rand,说明二者分布完全一致")

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者user3074620

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:58:09