【问题标题】:Why does the md5 algorithm accept numpy's int64 but not integers when hashing?为什么 md5 算法在哈希时接受 numpy 的 int64 而不是整数?
【发布时间】:2019-12-29 04:39:36
【问题描述】:
import hashlib
hash = hashlib.md5

我目前正在尝试了解为什么以下行有效:

hash(np.int64(identifier)).digest()

而这一行没有:

hash(identifier).digest()

这第二行基本上显示如下错误:object supporting the buffer API required

附带说明,identifier 变量是一个整数。据我所知,整数(Python中默认的整数)占用32位(或4字节),numpy的np.int64占用64位(或8字节)内存。

那么,为什么第一行有效而第二行无效?这是md5的要求吗?

【问题讨论】:

  • "据我所知,整数(Python 中的默认整数)占用 32 位(或 4 个字节)" 不,它们不是。 Python int 对象是,嗯,对象,就像 Python 中的所有东西一样,它们的底层表示是任意大小的,所以只要你有内存(和地址空间......),你的整数可以任意大。跨度>

标签: python numpy hash md5


【解决方案1】:

它之所以有效,是因为 numpy 整数足以实现所谓的Buffer API。 hashlib.md5 需要一个类似字节的对象。 python int 不是类似字节的对象。一个实现了 Buffer API 的对象可以被翻译成一个字节类对象。一般与MD5算法无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 2012-07-22
    • 2010-09-16
    • 2010-11-28
    • 2012-04-14
    • 1970-01-01
    • 2013-04-08
    • 2019-08-05
    相关资源
    最近更新 更多