【问题标题】:Python SHA-256 throws a TypeErrorPython SHA-256 抛出 TypeError
【发布时间】:2021-08-05 21:11:52
【问题描述】:

我正在尝试制作一个通过random 生成10 个数字的简单程序。然后,它将它们传递给hashlib,它对这些随机数进行 SHA-256。最后,哈希值会显示给用户。

这是我的代码:

import random
import hashlib

number1 = random.randint(0, 999999999999)
number2 = random.randint(0, 999999999999)
number3 = random.randint(0, 999999999999)
number4 = random.randint(0, 999999999999)
number5 = random.randint(0, 999999999999)
number6 = random.randint(0, 999999999999)
number7 = random.randint(0, 999999999999)
number8 = random.randint(0, 999999999999)
number9 = random.randint(0, 999999999999)
number10 = random.randint(0, 999999999999)

result1 = hashlib.sha256(number1)
result2 = hashlib.sha256(number2)
result3 = hashlib.sha256(number3)
result4 = hashlib.sha256(number4)
result5 = hashlib.sha256(number5)
result6 = hashlib.sha256(number6)
result7 = hashlib.sha256(number7)
result8 = hashlib.sha256(number8)
result9 = hashlib.sha256(number9)
result10 = hashlib.sha256(number10)

print("Hash 1:", result1)
print("Hash 2:", result2)
print("Hash 3:", result3)
print("Hash 4:", result4)
print("Hash 5:", result5)
print("Hash 6:", result6)
print("Hash 7:", result7)
print("Hash 8:", result8)
print("Hash 9:", result9)
print("Hash 10:", result10)

PyCharm 说没问题。但是,当你运行它时,它会抛出这个错误:

C:\Users\WINDOWS\Documents\PyToC\venv\Scripts\python.exe C:/Users/WINDOWS/Documents/PyToC/build/aquamine.py
Traceback (most recent call last):
  File "C:/Users/WINDOWS/Documents/PyToC/build/aquamine.py", line 15, in <module>
    result1 = hashlib.sha256(number1)
TypeError: object supporting the buffer API required

Process finished with exit code 1

为什么会这样?有什么办法可以解决。

【问题讨论】:

  • 您需要一个类似对象的字节作为参数,而不是数字:docs.python.org/3/library/hashlib.html
  • 如何将数字转换为字节? encode() 似乎不起作用。
  • bytes(str(num), 'utf-8') 大概?
  • 有效!谢谢。

标签: python hash sha256


【解决方案1】:

这是因为整数不支持缓冲区 API (https://docs.python.org/3/c-api/buffer.html),您可以将其转换为支持此功能的字节。

https://docs.python.org/3/library/stdtypes.html#int.to_bytes

result1 = hashlib.sha256(number1.to_bytes((number1.bit_length() + 7) // 8, byteorder='big'))

字节序可以是“大”或“小”,具体取决于最高有效位的位置

【讨论】:

    【解决方案2】:

    这是因为它sha256() 想要 字节 而不是数字或字符串.. 所以在这里你可以做

    result1 = hashlib.sha256(str(number1).encode())
    # also for result2, result3, ...
    
    

    【讨论】:

      猜你喜欢
      • 2020-11-15
      • 2018-07-14
      • 2012-08-09
      • 1970-01-01
      • 2021-01-22
      • 2013-06-03
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多