5 个版本
0.2.2 | 2023年10月13日 |
---|---|
0.2.1 | 2023年9月2日 |
0.2.0 | 2023年9月1日 |
0.1.0 | 2023年8月26日 |
#759 in 密码学
46KB
783 行
Digestible
Rust 更动态的 Hash 和 Hasher trait
与 Rust Hash 和 Hasher Traits 的关键区别
- 内置 ByteOrder。因此,您可以使用任何字节顺序消化数字类型。 ByteOrder
- 输出是一个泛型关联类型。因此,您可以将 Digest 集成到 ByteArray、String 中,使用 Base64 或 Digester 使用的任何类型。
- 使用
#[digestible(skip)]
跳过字段 - 使用 'digest_with' 和 'with' 覆盖默认的 digest 行为。 digest_with
- 支持所有实现 digest::Digest 的哈希算法,如 SHA2、md-5 等。
- 写入类型头以防止与类似类型冲突。(这是可选的,可以通过
#[digestible(type_header = none)]
禁用)
特性
no_std
支持- 将 Digest 实现为所有实现 digest::Digest 的类型的 Digester
- 使用
digest_with
支持浮点数和原子类型
与 Hash 一起工作
对于未实现 Digestible 的类型
您可以将 #[digestible(digest_with = digest_with_hash)]
添加到您的变量中,以告诉Digestible使用Hash进行验证。
在Digestible中实现Hash。
将 #[digestible(hash)]
添加到您的结构体或枚举中,将为它实现Hash。使用验证函数。允许您拥有相同的Hash和Digestible。
使用SHA2的示例
#[derive(Digestible)]
pub struct MyStruct {
pub id: u32,
pub name: String,
#[digestible(skip)]
pub password: String,
}
fn digest_to_bytes(){
let test = MyStruct{
id: 0,
name: "Test".to_string(),
password: "Test".to_string(),
};
let mut hasher = sha2::Sha256::new();
let result = hasher.digest_native(&test); // This will be the type of sha2 Output
}
fn digest_to_base64(){
let test = MyStruct{
id: 0,
name: "Test".to_string(),
password: "Test".to_string(),
};
let hasher = sha2::Sha256::new().into_base64();
let result = hasher.digest_native(&test); // This is a base64 encoded string
}
依赖项
~355–660KB
~14K SLoC