29 lines
1.1 KiB
Rust
29 lines
1.1 KiB
Rust
use argon2::{
|
|
password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
|
|
Argon2,
|
|
};
|
|
use std::time::SystemTime;
|
|
|
|
fn main() {
|
|
let password = b"hunter42"; // Bad password; don't actually use!
|
|
let start = SystemTime::now();
|
|
let salt: SaltString = SaltString::generate(&mut OsRng);
|
|
println!("salt: {}", salt);
|
|
// Argon2 with default params (Argon2id v19)
|
|
let argon2 = Argon2::default();
|
|
|
|
// Hash password to PHC string ($argon2id$v=19$...)
|
|
let password_hash = argon2.hash_password(password, &salt).unwrap().to_string();
|
|
println!("password_hash: {}", password_hash);
|
|
println!("Elapsed time: {:?}", start.elapsed());
|
|
// Verify password against PHC string.
|
|
//
|
|
// NOTE: hash params from `parsed_hash` are used instead of what is configured in the
|
|
// `Argon2` instance.
|
|
let parsed_hash = PasswordHash::new(&password_hash).unwrap();
|
|
assert!(Argon2::default()
|
|
.verify_password(password, &parsed_hash)
|
|
.is_ok());
|
|
println!("Elapsed time: {:?}", start.elapsed());
|
|
}
|