#digest #hash #keccak #hashing #crypto

无std sha3

纯Rust实现的SHA-3,这是一系列基于Keccak的哈希函数,包括eXtendable-Output Functions(XOF)系列的SHAKE函数,以及加速变体TurboSHAKE。

32次发布

0.11.0-pre.42024年7月26日
0.11.0-pre.32024年2月1日
0.11.0-pre.22024年1月17日
0.10.8 2023年5月5日
0.3.0 2016年11月17日

#43 in 加密学

Download history 346066/week @ 2024-05-02 355062/week @ 2024-05-09 351390/week @ 2024-05-16 337387/week @ 2024-05-23 378327/week @ 2024-05-30 348421/week @ 2024-06-06 372227/week @ 2024-06-13 355263/week @ 2024-06-20 329675/week @ 2024-06-27 318863/week @ 2024-07-04 352828/week @ 2024-07-11 395357/week @ 2024-07-18 395182/week @ 2024-07-25 441830/week @ 2024-08-01 443956/week @ 2024-08-08 395617/week @ 2024-08-15

1,749,381 每月下载量
用于 4,877 个crate(809个直接使用)

MIT/Apache

1MB
728

RustCrypto: SHA-3

crate Docs Apache2/MIT licensed Rust Version Project Chat Build Status

SHA-3加密哈希算法的纯Rust实现。

SHA-3标准中定义了6个标准算法

  • SHA3-224
  • SHA3-256
  • SHA3-384
  • SHA3-512
  • SHAKE128,一个可扩展输出函数(XOF)
  • SHAKE256,一个可扩展输出函数(XOF)
  • Keccak224Keccak256Keccak384Keccak512(NIST提交,未更改填充)

此crate还支持TurboSHAKE XOF变体。

示例

SHA3-256的输出大小是固定的,因此通常通过Digest trait来访问其功能。

use hex_literal::hex;
use sha3::{Digest, Sha3_256};

let mut hasher = Sha3_256::new();
hasher.update(b"abc");
let hash = hasher.finalize();

assert_eq!(hash, hex!("3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532"));

// Hex-encode hash using https://docs.rs/base16ct
let hex_hash = base16ct::lower::encode_string(&hash);
assert_eq!(hex_hash, "3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532");

SHAKE函数具有可扩展的输出,因此最终化方法返回XOF读取器,可以从其中读取任意长度的结果。注意,这些函数没有实现Digest,因此必须导入底层特质。

use sha3::{Shake128, digest::{Update, ExtendableOutput, XofReader}};
use hex_literal::hex;

let mut hasher = Shake128::default();
hasher.update(b"abc");
let mut reader = hasher.finalize_xof();
let mut buf = [0u8; 10];
reader.read(&mut buf);
assert_eq!(buf, hex!("5881092dd818bf5cf8a3"));

还可以参考RustCrypto/hashes的readme中的示例部分

最低支持的Rust版本

Rust 1.71 或更高。

最低支持的Rust版本可能会在未来更改,但将以较小的版本号升级的方式进行。

SemVer策略

  • 此库的所有默认功能都受SemVer的保护
  • 如上所述,MSRV被视为免于SemVer

许可协议

此crate的许可协议为以下之一

任选其一。

贡献

除非你明确声明,否则你提交的任何有意包含在本作品中的贡献,根据Apache-2.0许可定义,应按照上述方式双许可,不附加任何额外条款或条件。

依赖关系