#hash #hashing #crypto

无需std sha2

SHA-2哈希函数家族(包括SHA-224、SHA-256、SHA-384和SHA-512)的纯Rust实现

27个版本

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年9月26日
0.1.2 2016年5月6日

密码学类别中排名176

Download history 1799095/week @ 2024-05-04 1921783/week @ 2024-05-11 1896505/week @ 2024-05-18 1830394/week @ 2024-05-25 2038328/week @ 2024-06-01 1944088/week @ 2024-06-08 1932007/week @ 2024-06-15 1937644/week @ 2024-06-22 1777078/week @ 2024-06-29 1972252/week @ 2024-07-06 1954664/week @ 2024-07-13 2045567/week @ 2024-07-20 2045571/week @ 2024-07-27 2057114/week @ 2024-08-03 2119766/week @ 2024-08-10 1741424/week @ 2024-08-17

每月下载量8,311,978
18,642个crate(直接使用3,390个)中使用

MIT/Apache许可

88KB
2K SLoC

RustCrypto: SHA-2

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

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

SHA-2标准中指定了6种标准算法:Sha224Sha256Sha512_224Sha512_256Sha384Sha512

从算法上来说,只有两个核心算法:SHA-256和SHA-512。所有其他算法都是基于这两个算法的应用,具有不同的初始哈希值,并截断为不同的摘要位长度。列表中的前两个算法基于SHA-256,而后四个基于SHA-512。

示例

一次性API

use sha2::{Sha256, Digest};
use hex_literal::hex;

let hash = Sha256::digest(b"hello world");
assert_eq!(hash, hex!("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"));

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

增量API

use sha2::{Sha256, Sha512, Digest};
use hex_literal::hex;

let mut hasher = Sha256::new();
hasher.update(b"hello ");
hasher.update(b"world");
let hash256 = hasher.finalize();

assert_eq!(hash256, hex!("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"));

let mut hasher = Sha512::new();
hasher.update(b"hello world");
let hash512 = hasher.finalize();

assert_eq!(hash512, hex!(
    "309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f"
    "989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f"
));

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

最低支持的Rust版本

Rust 1.72 或更高版本。

最低支持的Rust版本未来可能会更改,但将通过小版本号的增加来完成。

SemVer策略

  • 此库的所有默认功能均受SemVer保护
  • MSRV被认为不受SemVer的限制,如上所述

许可

该crate可以在以下任一许可下使用:

由您选择。

贡献

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

依赖项

~310–530KB
~12K SLoC