我正在嘗試使用 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()))
我究竟做錯了什么?為什么這適用于字串而不是位元組?
uj5u.com熱心網友回復:
如果您正在使用,b'\x00'那么您將定義一個二進制字串,如注釋部分所示。由于您直接編碼了一個位元組,編譯器或解釋器已經執行了轉換。因此,您無需在之后執行任何轉換。
請注意,對于 Python 3,您還可以使用bytes(1)which 指定大小為 1 的零填充位元組陣列。如果您認為這不那么可讀,您可以使用bytes.fromhex('00'). 不過,在這兩種情況下,轉換都將在運行時執行,因此它的開銷非常小。
uj5u.com熱心網友回復:
Python 的haslib已經接受二進制字串。
import hashlib
m = hashlib.sha256()
m.update(b"\x00") #or use m.update(bytes.fromhex('00'))
hashed = m.hexdigest()
print(hashed)
輸出
28969cdfa74a12c82f3bad960b0b000aca2ac329deea5c2328ebc6f2ba9802c1
有NIST SHA-256 面向位元組的測驗向量,但是沒有針對b"\x00". 我已經測驗了其他位元組值,例如0xd3輸出
28969cdfa74a12c82f3bad960b0b000aca2ac329deea5c2328ebc6f2ba9802c1正確。
uj5u.com熱心網友回復:
它是一個空位元組。
00 是一個空位元組。
“在所有現代字符集中,空字符的代碼點值為零。在大多數編碼中,它被轉換為具有零值的單個代碼單元。例如,在 UTF-8 中,它是單個零位元組。但是,在修改后的 UTF-8 中,空字符被編碼為兩個位元組:0xC0、0x80。這允許將值為零的位元組(現在不用于任何字符)用作字串終止符。
我相信 \x00 可以找到 00
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/481930.html
標籤:Python 哈希 密码学 python-密码学
