#sha-3 #hash #keccak #no-alloc #byte-slice #define

no-std bin+lib sha3-rust

此软件包提供了Keccak(SHA-3)密码学哈希函数族的实现

2 个版本

0.1.1 2024年6月5日
0.1.0 2024年6月5日

#426 in 加密学

MIT/Apache

23KB
212

Keccak的Sha3 Rust

此软件包提供了Keccak(SHA-3)密码学哈希函数族的实现。

概述

Sha3软件包是一个Rust库,实现了Keccak(SHA-3)密码学哈希函数族。它提供了多种不同输出长度的哈希函数,包括224、256、384和512位。这些哈希函数是通过使用sha3!宏创建的,该宏定义了具有特定输出长度的哈希函数。该软件包还提供了将字节转换为位和相反方向的实用函数,这些函数被哈希函数内部使用。

特性

  • SHA-3哈希函数实现:软件包提供了具有不同输出长度的哈希函数,适用于各种密码学应用。
  • 灵活的输入处理:哈希函数接受字节切片作为输入,允许您哈希字符串、文件或任何其他二进制数据。
  • 可定制的填充和海绵函数:软件包包括用于填充输入数据和实现海绵结构的实用函数,为密码学协议提供了灵活性。
  • 详尽的代码库文档:代码库中的每个函数和宏都有详尽的文档,便于理解和修改以适应特定用例。

用法

要将此软件包用于您的Rust项目,请将以下行添加到您的Cargo.toml文件中

[dependencies]
sha3-rust = "0.1.1"

然后,在您的Rust代码中,您可以按如下方式导入和使用SHA-3哈希函数

use sha3_rust::*;

fn main() {
    let input = "Hello, world!";
    let hash = sha3_256(input.as_bytes());
    println!("SHA3-256 hash of '{}': {:?}", input, hash);
}
  • 输出
SHA3-256 hash of 'Hello, world!': [172, 79, 176, 238 ... 139, 93, 150]

更多用例

  • 示例 1:哈希一个简单的字符串
    // Create a string to hash.
    let input_str = "Hello, world!";
    // Compute the SHA3-256 hash of the string.
    let hash_256 = sha3_256(input_str.as_bytes());

    println!("SHA3-256 hash of '{}': {:?}", input_str, hash_256);
  • 示例 2:哈希一个文件
    // Path to the file to hash.
    let file_path = "example.txt";
    // Read the contents of the file.
    let file_contents = std::fs::read(file_path).expect("Failed to read file");
    // Compute the SHA3-512 hash of the file.
    let hash_512 = sha3_512(&file_contents);

    println!("SHA3-512 hash of file '{}': {:?}", file_path, hash_512);
  • 示例 3:哈希多个输入
    // An array of byte slices representing the inputs to hash.
    let inputs: [&[u8]; 3] = [&[1, 2, 3], &[4, 5, 6, 7], &[8, 9]];
    // Compute the SHA3-224 hash of each input.
    for input in &inputs {
        let hash = sha3_224(input);
        // Print the hash of each input.
        println!("SHA3-224 hash of {:?}: {:?}", input, hash);
    }
  • 示例 4:哈希用户密码
    // Password to hash.
    let user_password = "s3cr3t_p@ssw0rd";
    // Compute the SHA3-384 hash of the password.
    let hash_384 = sha3_384(user_password.as_bytes());

    println!("SHA3-384 hash of user password: {:?}", hash_384);
  • 示例 5:安全地哈希敏感数据
    // Sensitive data to hash.
    let sensitive_data = b"0123456789abcdef";
    // Compute the SHA3-256 hash of the sensitive data.
    let hash_256_secure = sha3_256(sensitive_data);

    println!("Secure SHA3-256 hash of sensitive data: {:?}", hash_256_secure);

代码解释

软件包的代码库由各种函数和宏组成,这些函数和宏实现了Keccak置换和SHA-3哈希函数。以下是一些关键组件的简要说明

  • 状态表示:类型State表示在Keccak置换中使用的状态数组。它是一个三维布尔值数组。
  • 轮函数:如thetarhopichiiota等函数实现了SHA-3标准中指定的Keccak置换的不同步骤。
  • 轮常数:函数rc计算置换中iota步骤使用的轮常数。
  • 轮函数应用round 函数执行一次 Keccak 交换。
  • Sponge 构造sponge 函数实现了 Keccak 哈希函数中使用的 sponge 构造。它接受一个 sponge 函数 f、一个填充函数 pad、一个块大小 r、一个输入 n 以及一个期望的输出大小 d
  • 填充函数pad101 函数实现了 Keccak 规范中指定的填充方案。
  • 哈希函数sha3! 宏定义了具有不同输出长度的 SHA-3 哈希函数,使用 sponge 构造和填充函数。

额外用例

除了对字符串和文件进行哈希处理外,Sha3 crate 还可用于各种加密应用,例如

  • 密码哈希:使用 SHA-3-384 或 SHA-3-512 安全地哈希用户密码,以保护敏感用户数据。
  • 数据完整性验证:计算数据的哈希值,以验证其在传输或存储过程中的完整性。
  • 数字签名:将 SHA-3 哈希值用作数字签名方案的一部分,以确保数据的真实性和完整性。
  • 密钥派生:从哈希数据派生加密密钥,用于基于密钥的加密方案。
  • 区块链:在区块链应用中计算区块数据的哈希值,以确保区块链账本的不可变性和完整性。

贡献

欢迎贡献!如果您遇到任何错误或对改进有建议,请打开问题或在 GitHub 上提交拉取请求。

许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。


Feel free to further customize and expand upon this README.md as needed for your project!

无运行时依赖