use argon2::{ password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, Argon2, }; pub fn encrypt(password: &str) -> argon2::password_hash::Result { let salt = SaltString::generate(&mut OsRng); let argon2 = Argon2::default(); argon2 .hash_password(password.as_bytes(), &salt) .map(|hash| hash.to_string()) } pub fn verify(password_hash: &str, password: &str) -> argon2::password_hash::Result<()> { let parsed_hash = PasswordHash::new(&password_hash)?; Argon2::default().verify_password(password.as_bytes(), &parsed_hash) } #[cfg(test)] mod tests { use super::*; #[test] fn check_always_random_salt() { let pass = "ahs9dya8tsd7fa8tsa86tT&^R%^DS^%ARS&A"; let hash = encrypt(pass).unwrap(); assert!(verify(hash.as_str(), pass).is_ok()); } }