35 lines
1.0 KiB
Rust
35 lines
1.0 KiB
Rust
use scrypt::{
|
|
password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
|
|
Params, Scrypt,
|
|
};
|
|
|
|
use std::time::SystemTime;
|
|
|
|
fn main() {
|
|
let password = b"hunter42"; // Bad password; don't actually use!
|
|
let start = SystemTime::now();
|
|
|
|
let salt = SaltString::generate(&mut OsRng);
|
|
println!("salt: {}", salt);
|
|
|
|
// Hash password to PHC string ($scrypt$...)
|
|
let param = Params::new(13, 8, 1, 32).unwrap();
|
|
let password_hash = Scrypt
|
|
.hash_password_customized(password, None, None, param, &salt)
|
|
.unwrap()
|
|
.to_string();
|
|
print!("password_hash: {}", password_hash);
|
|
println!(
|
|
"Elapsed time: {:?}",
|
|
SystemTime::now().duration_since(start)
|
|
);
|
|
// Verify password against PHC string
|
|
|
|
let parsed_hash = PasswordHash::new(&password_hash).unwrap();
|
|
assert!(Scrypt.verify_password(password, &parsed_hash).is_ok());
|
|
println!(
|
|
"Elapsed time: {:?}",
|
|
SystemTime::now().duration_since(start)
|
|
);
|
|
}
|