如何用 Python 散列 SHA256 字节 00?
How to hash SHA256 byte 00 with Python?
我正在尝试使用 python 对字节 b"00" 进行 SHA256 编码,但不明白我必须编码什么。
import binascii
import hashlib
byte_ = binascii.unhexlify(b"00")
byte_ = b"00".decode("ascii")
hashed_byte = hashlib.sha256(byte_)
print((hashed_byte.hexdigest()))
我做错了什么?为什么这适用于字符串而不是字节?
它是一个空字节。
00 是空字节。
"在所有现代字符集中,空字符的代码点值为零。在大多数编码中,这被转换为具有零值的单个代码单元。例如,在 UTF-8 中它是一个单个零字节。但是,在修改后的 UTF-8 中,空字符被编码为两个字节:0xC0、0x80。这允许值为零的字节(现在不用于任何字符)用作字符串终止符."
我相信 \x00 可以找到 00
如果您使用 b'\x00'
,则您定义了一个二进制字符串,如 所示。当您直接编码一个字节时,编译器或解释器已经执行了转换。所以你之后不必执行任何转换。
请注意,对于 Python 3,您还可以使用 bytes(1)
,它指定一个大小为 1 的零填充字节数组。如果您认为这样可读性差,您可以使用 bytes.fromhex('00')
.在这两种情况下,转换 将 在运行时执行,因此它的开销非常小。
Python 的 hashlib 已经接受二进制字符串。
import hashlib
m = hashlib.sha256()
m.update(b"\x00") #or use m.update(bytes.fromhex('00'))
hashed = m.hexdigest()
print(hashed)
产出
6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d
有NIST SHA-256 byte-oriented test vectors,但是没有b"\x00"
的测试向量。我已经测试了其他字节值,例如 0xd3
outputs
28969cdfa74a12c82f3bad960b0b000aca2ac329deea5c2328ebc6f2ba9802c1
正确。
如果您想查看内部结构,请参阅 https://sha256algorithm.com/
我正在尝试使用 python 对字节 b"00" 进行 SHA256 编码,但不明白我必须编码什么。
import binascii
import hashlib
byte_ = binascii.unhexlify(b"00")
byte_ = b"00".decode("ascii")
hashed_byte = hashlib.sha256(byte_)
print((hashed_byte.hexdigest()))
我做错了什么?为什么这适用于字符串而不是字节?
它是一个空字节。
00 是空字节。
"在所有现代字符集中,空字符的代码点值为零。在大多数编码中,这被转换为具有零值的单个代码单元。例如,在 UTF-8 中它是一个单个零字节。但是,在修改后的 UTF-8 中,空字符被编码为两个字节:0xC0、0x80。这允许值为零的字节(现在不用于任何字符)用作字符串终止符."
我相信 \x00 可以找到 00
如果您使用 b'\x00'
,则您定义了一个二进制字符串,如
请注意,对于 Python 3,您还可以使用 bytes(1)
,它指定一个大小为 1 的零填充字节数组。如果您认为这样可读性差,您可以使用 bytes.fromhex('00')
.在这两种情况下,转换 将 在运行时执行,因此它的开销非常小。
Python 的 hashlib 已经接受二进制字符串。
import hashlib
m = hashlib.sha256()
m.update(b"\x00") #or use m.update(bytes.fromhex('00'))
hashed = m.hexdigest()
print(hashed)
产出
6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d
有NIST SHA-256 byte-oriented test vectors,但是没有b"\x00"
的测试向量。我已经测试了其他字节值,例如 0xd3
outputs
28969cdfa74a12c82f3bad960b0b000aca2ac329deea5c2328ebc6f2ba9802c1
正确。
如果您想查看内部结构,请参阅 https://sha256algorithm.com/