24个版本
0.11.0-pre.9 | 2024年7月26日 |
---|---|
0.11.0-pre.8 | 2024年2月1日 |
0.11.0-pre.7 | 2024年1月17日 |
0.11.0-pre | 2022年12月19日 |
0.3.0 |
|
#77 在 密码学
9,817,562 每月下载
用于 23,257 个crate(754直接使用)
110KB
2.5K SLoC
RustCrypto: 密码摘要算法特质
描述密码哈希函数(也称为摘要算法)功能的特质。
有关使用此特质的实现,请参阅RustCrypto/hashes。
最低支持的Rust版本
Rust 1.71 或更高。
最低支持的Rust版本将来可能会更改,但将以小版本号的增加来完成。
SemVer策略
- 此库的所有默认功能均受SemVer保护
- 如上所述,MSRV被视为免于SemVer
用法
让我们以Sha256为例,演示如何使用此仓库中的crate。
首先将sha2
crate添加到您的Cargo.toml
[dependencies]
sha2 = "0.11"
sha2
和其他crate重新导出digest
crate和Digest
特质以方便使用,因此您无需将digest
crate作为显式依赖项添加。
现在您可以编写以下代码
use sha2::{Sha256, Digest};
let mut hasher = Sha256::new();
let data = b"Hello world!";
hasher.update(data);
// `input` can be called repeatedly and is generic over `AsRef<[u8]>`
hasher.update("String data");
// Note that calling `finalize()` consumes hasher
let hash = hasher.finalize();
println!("Result: {:x}", hash);
在此示例中,hash
具有类型Array<u8, U64>
,这是[u8; 64]
的泛型替代品。
或者,您可以使用链式方法,这与上一个示例等价
let hash = Sha256::new()
.chain_update(b"Hello world!")
.chain_update("String data")
.finalize();
println!("Result: {:x}", hash);
如果整个消息可用,您还可以使用便利的digest
方法
let hash = Sha256::digest(b"my message");
println!("Result: {:x}", hash);
哈希可读对象
如果您想从Read
特质(例如文件)中哈希数据,则可以依靠Write
特质的实现(需要启用默认的std
功能)
use sha2::{Sha256, Digest};
use std::{fs, io};
let mut file = fs::File::open(&path)?;
let mut hasher = Sha256::new();
let n = io::copy(&mut file, &mut hasher)?;
let hash = hasher.finalize();
println!("Path: {}", path);
println!("Bytes processed: {}", n);
println!("Hash value: {:x}", hash);
泛型代码
您可以在Digest
(或来自digest
crate的其他特质)特质上编写泛型代码,该代码适用于不同的哈希函数
use digest::Digest;
// Toy example, do not use it in practice!
// Instead use crates from: https://github.com/RustCrypto/password-hashing
fn hash_password<D: Digest>(password: &str, salt: &str, output: &mut [u8]) {
let mut hasher = D::new();
hasher.update(password.as_bytes());
hasher.update(b"$");
hasher.update(salt.as_bytes());
output.copy_from_slice(hasher.finalize().as_slice())
}
let mut buf1 = [0u8; 32];
let mut buf2 = [0u8; 64];
hash_password::<sha2::Sha256>("my_password", "abcd", &mut buf1);
hash_password::<sha2::Sha512>("my_password", "abcd", &mut buf2);
如果您想使用具有特征对象的哈希函数,请使用 digest::DynDigest
特征。
许可协议
以下任一许可协议下:
任选其一。
贡献
除非您明确声明,否则您有意提交以包含在本作品中的任何贡献,根据 Apache-2.0 许可证定义,应双许可如上,不附加任何额外条款或条件。
依赖项
~185–445KB
~10K SLoC