#sha-512 #hashing #hash #hasher #security #cryptography #rs-shield

rs_sha512

rs_sha512 是 SHA-512 密码散列算法的 Rust 实现,是更大项目 rs_shield 的一部分。此软件包以独立的方式提供 SHA-512 散列功能,适用于只需要 SHA-512 的情况。对于寻求全面密码函数集的用户,此算法也包含在更广泛的 rs_shield 库捆绑包中。 rs_sha512 和更大项目的重点是性能、安全和开放性,并致力于持续维护和改进。

4个版本

0.1.3 2023年6月12日
0.1.2 2023年6月4日
0.1.1 2023年6月4日
0.1.0 2023年5月30日

#1625 in 算法


用于 2 crates

GPL-2.0-only

140KB
2.5K SLoC

rs_sha512

rs_sha512 是一个实现 SHA-512 密码散列算法的 Rust 库。配置为与 Rust 的 libcore 在 #![no_std] 上下文中兼容,作为一个独立库用于特殊用途,并且也与 #![no_std]#![no_alloc] 环境兼容,使其适用于动态内存分配不可行的系统。

此 SHA-512 实现符合联邦信息处理标准 (FIPS) 出版物 180-4[^1]。根据国家标准与技术研究院 (NIST) 的指南,SHA-512 被推荐用于以下用途

"SHA-512 提供了 256 位的碰撞攻击安全性,因此适合需要 256 位哈希长度的功能。"

根据这一建议,NIST 的建议意味着 SHA-512 适合以下环境

  • 需要 256 位安全性的数字签名。
  • 需要 256 位安全性的系统和协议中的密码散列函数。
  • 需要 256 位安全性的认证方法。

除了这些具体的建议之外,SHA-512 还可用于

  • Merkle 树中的数据完整性检查[^4]。
  • 用于生成提交标识符的版本控制系统[^2]。
  • 当需要抗碰撞时,基于哈希的消息认证码 (HMAC)[^3]。
  • 作为布隆过滤器中的随机哈希函数[^5]。

根据您的整体安全目标和风险承受能力,以下这些点应仔细考虑。

为了访问一系列加密函数,可以使用rs_sha512作为rs_shield库捆绑包的一部分。

如何使用

以下是在Rust项目中使用rs_sha512crate的步骤

  1. 将以下行添加到您的Cargo.toml中的[dependencies]部分

    rs_sha512 = "0.1.*"
    
  2. 在您的代码中使用rs_sha512模块提供的函数。以下是从字符串创建SHA-512散列的示例

    use rs_sha512::{HasherContext, Sha512Hasher};
    
    let mut sha512hasher = Sha512Hasher::default();
    sha512hasher.write(b"your string here");
    
    let u64result = sha512hasher.finish();
    let bytes_result = HasherContext::finish(&mut sha512hasher);
    assert_eq!(u64result, 0x3B9147CC94F9A792);
    assert_eq!(
        format!("{bytes_result:02x}"),
        "3b9147cc94f9a7926fd175a4f7292adca33c467d94a0c9890e6ff581433e03fcb17f4874eb53876874c4d262baeb49decae0492dd19e37ef76d345926ff66744"
    );
    assert_eq!(
        format!("{bytes_result:02X}"),
        "3B9147CC94F9A7926FD175A4F7292ADCA33C467D94A0C9890E6FF581433E03FCB17F4874EB53876874C4D262BAEB49DECAE0492DD19E37EF76D345926FF66744"
    );
    assert_eq!(
        bytes_result,
        [
            0x3B, 0x91, 0x47, 0xCC, 0x94, 0xF9, 0xA7, 0x92, 0x6F, 0xD1, 0x75, 0xA4, 0xF7, 0x29, 0x2A, 0xDC, 0xA3, 0x3C,
            0x46, 0x7D, 0x94, 0xA0, 0xC9, 0x89, 0x0E, 0x6F, 0xF5, 0x81, 0x43, 0x3E, 0x03, 0xFC, 0xB1, 0x7F, 0x48, 0x74,
            0xEB, 0x53, 0x87, 0x68, 0x74, 0xC4, 0xD2, 0x62, 0xBA, 0xEB, 0x49, 0xDE, 0xCA, 0xE0, 0x49, 0x2D, 0xD1, 0x9E,
            0x37, 0xEF, 0x76, 0xD3, 0x45, 0x92, 0x6F, 0xF6, 0x67, 0x44
        ]
    )
    

更多信息

有关rs_sha512的更详细探索,其他可用的加密函数概述以及rs_shield项目的介绍,请参阅crates.io上的RustyShield项目页面

贡献

潜在的贡献者鼓励查阅我们GitHub页面上的贡献指南

许可证

本项目采用GPL-2.0-only许可证。

参考文献

[^1]: 美国国家标准与技术研究院。 (2015)。安全散列标准 (SHS)。 FIPS PUB 180-4

[^2]: Linus Torvalds。 (2005)。Git:分布式版本控制系统。软件:实践与经验,41(1),79-88。 DOI:10.1002/spe.1006

[^3]: Krawczyk, H.,Bellare, M.,& Canetti, R.。 (1997)。HMAC:基于密钥的哈希消息认证。 RFC 2104

[^4]: Merkle, R. C.。 (1988)。基于传统加密函数的数字签名。 链接

[^5]: Bloom, B. H.。 (1970)。在允许错误的哈希编码中的空间/时间权衡。通讯协会通讯,13(7),422-426。 DOI:10.1145/362686.362692


注意:参考文献是根据截至2023年6月2日最佳知识提供的。

依赖关系