2023-05-04 17:34:08 +08:00

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());
}