如何获取类型为&[u8; 32]的SHA256摘要?
解决方案
你可以通过两种方式直接获取SHA256摘要的原始字节,避免十六进制字符串的来回转换:
方式一:使用当前sha256 crate的内置函数
该crate其实提供了直接返回字节的API,无需先转字符串:
digest_bytes_to_array直接返回[u8; 32]类型的摘要digest_bytes返回Vec<u8>,可以轻松转为&[u8]切片
代码示例:
use sha256; fn main() { let input_data = b"your input slice here"; // 获取固定长度字节数组 let digest_array: [u8; 32] = sha256::digest_bytes_to_array(input_data); // 获取字节切片(从Vec转换) let digest_vec = sha256::digest_bytes(input_data); let digest_slice: &[u8] = &digest_vec; }
方式二:使用更底层的sha2 crate
如果需要更灵活的哈希操作,推荐使用sha2 crate(很多上层SHA256封装都是基于它实现的):
- 先在
Cargo.toml中添加依赖:
[dependencies] sha2 = "0.10"
- 代码示例:
use sha2::{Sha256, Digest}; fn compute_sha256(data: &[u8]) -> [u8; 32] { let mut hasher = Sha256::new(); hasher.update(data); // finalize返回GenericArray,可直接转为[u8;32] hasher.finalize().into() } fn main() { let input = b"test data"; let digest_bytes = compute_sha256(input); // 需要&[u8]的话直接取切片即可 let digest_slice: &[u8] = &digest_bytes; }
两种方式都跳过了十六进制字符串的转换步骤,完全消除了不必要的性能损耗。
内容的提问来源于stack exchange,提问作者fadedbee
相关产品推荐
相关产品推荐

