8个稳定版本

1.5.2 2024年1月23日
1.5.1 2023年12月29日
1.5.0 2023年10月26日
1.4.0 2023年9月29日
1.1.0 2023年5月29日

#876 in 加密学

Download history 68/week @ 2024-03-11 4/week @ 2024-03-18 42/week @ 2024-03-25 105/week @ 2024-04-01 16/week @ 2024-04-08 34/week @ 2024-04-15 1/week @ 2024-04-22 13/week @ 2024-04-29 106/week @ 2024-05-06 24/week @ 2024-05-13 28/week @ 2024-05-20 13/week @ 2024-05-27 25/week @ 2024-06-03 20/week @ 2024-06-10 10/week @ 2024-06-17 45/week @ 2024-06-24

102 每月下载次数
4 个crate(2个直接)中使用

MIT 许可证

1.5MB
6K SLoC

C 2.5K SLoC // 0.2% comments Visual Studio Project 2.5K SLoC // 0.0% comments Rust 1K SLoC // 0.0% comments Visual Studio Solution 158 SLoC PowerShell 70 SLoC // 0.0% comments Shell 51 SLoC // 0.0% comments

Rust argon2-kdf

一个使用Argon2进行密码散列和派生加密密钥的库。Argon2是一个内存-hard 密钥派生函数,赢得了密码散列竞赛。它可以生成非常强大的散列。

此crate是argon2 crate的替代品。argon2 crate是一个纯Rust实现,而此crate使用原始C Argon2库。原始C实现通常比argon2 crate的实现速度快(尽管您真的应该在您的机器上测试它——性能基准很少具有普遍适用性)。

此crate旨在简单易用。只需看看示例!

用法

要使用argon2-kdf,请将以下内容添加到您的Cargo.toml

[dependencies]
argon2-kdf = "1.5.2"

要向用于构建Argon2库的C编译器传递构建标志,您可以在环境变量ARGON2_KDF_C_COMPILER_FLAGS中添加分号分隔的标志列表。例如,如果您希望禁用默认启用的AVX优化,可以使用以下命令:ARGON2_KDF_C_COMPILER_FLAGS="-mno-avx512f;-mno-avx2" cargo build

示例

散列密码,然后验证散列

use argon2_kdf::Hasher;

let password = b"password";
let hash = Hasher::default().hash(password).unwrap();
assert!(hash.verify(password));

更改用于散列的参数

use argon2_kdf::{Algorithm, Hasher};

let password = b"password";

let hash = Hasher::new()
        .algorithm(Algorithm::Argon2id)
        .salt_length(24)
        .hash_length(42)
        .iterations(12)
        .memory_cost_kib(125000)
        .threads(2)
        .hash(password)
        .unwrap();

assert!(hash.verify(password));
assert_eq!(hash.as_bytes().len(), 42);
assert_eq!(hash.salt_bytes().len(), 24);

验证散列字符串中的散列

use argon2_kdf::{Hash, Hasher};
use std::str::FromStr;

let password = b"password";
let hash_string = "$argon2id$v=19$m=128,t=2,p=1$VnZ3ZFNhZkc$djHLRc+4K/DqQL0f8DMAQQ";

let hash = Hash::from_str(hash_string).unwrap();
assert!(hash.verify(password));

生成散列字符串

use argon2_kdf::{Hash, Hasher};
use std::str::FromStr;

let password = b"password";
let hash = Hasher::default().hash(password).unwrap();

let hash_string = hash.to_string();

assert!(Hash::from_str(&hash_string).unwrap().verify(password));

使用散列和验证的密钥(有时称为“胡椒”)

use argon2_kdf::{Hasher, Secret};

let password = b"password";
let secret = b"secret";

let hash = Hasher::default()
        .secret(secret.into())
        .hash(password)
        .unwrap();

assert!(hash.verify_with_secret(password, secret.into()));

使用您自己的盐(默认情况下,散列器将使用安全的随机盐)

use argon2_kdf::Hasher;

let password = b"password";
let salt = b"dontusethissalt";

let hash = Hasher::default()
        .custom_salt(salt)
        .hash(password)
        .unwrap();

assert!(hash.verify(password));

依赖项