Rust下`std`和`no-std`的`HASH256`加密及16进制字符串转换与输出

简介

  • 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的写法。

结束

  • 感谢阅读,有问题可以给我留言

你可能感兴趣的:(Rust下`std`和`no-std`的`HASH256`加密及16进制字符串转换与输出)