简介
- sha256是非常常用的加密压缩算法,那么Rust中应该如何使用,这里简单介绍一下。
- substrate的runtime是不支持std的,所以这里也介绍在no-std环境下应该如何写。
std
模式下的写法
- 标准库下的写法就相对简单这里简单描述一下。
- cargo.toml 需要引入类库:
hex = { version = "0.4"}
let content_str = "EXAMPLE-STR";
let sha256_u8 = sha2_256(content_str.as_bytes()).to_vec();
let sha256_hex_str = &hex::encode(&sha256_u8);
println!("sha256_hex_str STD mode = {:?}", &sha256_hex_str);
sha256_hex_str STD mode = "6f91a187b8cd62b74f4f17f6380605ec97a2f8d98e7b8cef9bd6aff051ccd7d4"
no-std
模式下的写法
- no-std 要麻烦的多,因为一些类库对no-std的完善的抽象层次没那么好,但是substrate开发有需要,这里介绍一下这个写法,希望可以帮助需要的人节省时间。
- 首先 cargo.toml 需要引入
sha2 = {default-features = false, version = '0.9.8'}
类库,以及 hex = { version = "0.4", default-features = false }
let content_str = "EXAMPLE-STR";
let mut sha_256_worker = sha2::Sha256::new();
sha_256_worker.update(content_str.as_bytes());
let sha256_u8 = sha_256_worker.finalize().as_slice().to_vec();
let mut hex_encode_slice = [0u8; 32 * 2];
hex::encode_to_slice(&sha256_u8.as_slice(), &mut hex_encode_slice as &mut [u8]);
println!(
"sha256_hex_str NO-STD mode = {:?}",
sp_std::str::from_utf8(&hex_encode_slice as &[u8])
);
sha256_hex_str NO-STD mode = Ok("6f91a187b8cd62b74f4f17f6380605ec97a2f8d98e7b8cef9bd6aff051ccd7d4")
- 除了最后的 println!() 都是no-std的写法。
结束