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

为何在不同机器上对numpy数组执行blake2b会得到不同结果?

问题

在两台不同机器(一台Linux、一台Windows,均为64位小端序)上运行以下Python代码,使用了相同版本的Python和numpy,但输出的blake2b哈希结果不同。打印数组字节内容时二者完全一致。

代码如下:

import numpy as np
from hashlib import blake2b

print(blake2b(np.array([1, 2, 3])).hexdigest())
原因分析与解决办法
  • 核心问题:numpy数组对象直接传入哈希函数的处理差异
    blake2b要求传入字节类对象,但直接传入numpy.ndarray实例时,哈希函数处理的不是数组的原始数据字节,而是numpy数组对象的内部完整表示——不同系统中,数组对象的一些隐藏元数据(比如内存管理相关的属性)可能存在细微差异,这些差异会被纳入哈希计算,导致结果不同。

  • 关键验证点
    你已经确认数组的字节内容一致,说明数组的实际数据部分没有问题,问题出在数组对象本身的跨系统表示差异上。

  • 解决办法
    提取数组的原始字节数据再传入哈希函数,修改后的代码如下:

    import numpy as np
    from hashlib import blake2b
    
    arr = np.array([1, 2, 3])
    print(blake2b(arr.tobytes()).hexdigest())
    

    使用arr.tobytes()可以精准获取数组的原始数据字节,这部分在符合小端序的64位系统中完全一致,因此哈希结果会统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:33:15