我正在散列一个字符串。
let src = String::from("abcd12342020");
let h1 = sha2::Sha256::digest(&src.as_bytes());
let h2 = sha2::Sha256::digest(hex::decode(&src).expect("this is not hex"));
h1
并且h2
是不同的。其根本原因是什么?字节表示和十六进制解码有什么区别?(试图提供一个游乐场,但hex
那里无法创建)
我正在散列一个字符串。
let src = String::from("abcd12342020");
let h1 = sha2::Sha256::digest(&src.as_bytes());
let h2 = sha2::Sha256::digest(hex::decode(&src).expect("this is not hex"));
h1
并且h2
是不同的。其根本原因是什么?字节表示和十六进制解码有什么区别?(试图提供一个游乐场,但hex
那里无法创建)
h1
和h2
是不同的,因为src.as_bytes()
和hex::decode(&src)
是不同的。用dbg!
宏包裹它们以查看差异。它们是不同的,因为
hex::decode
将文本解析为十六进制,含义ab
被解析为0xAB
等。但src.as_bytes()
返回编码为 UTF-8 字节序列的文本,含义ab
在内存中编码为[0x61, 0x62]
。