use argon2::password_hash::{self, SaltString}; use argon2::{Argon2, PasswordHasher, Algorithm, Version, Params}; fn compute_password_hash(password: String) -> Result<String, password_hash::Error> { let salt = SaltString::generate(&mut rand::thread_rng()); let password_hash = Argon2::new( Algorithm::Argon2id, Version::V0x13, Params::new(15000, 2, 1, None).unwrap(), ) .hash_password(password.as_bytes(), &salt)? .to_string(); Ok(password_hash) } fn main() { let password = "thisispassword".to_string(); let hash = compute_password_hash(password); println!("{:?}", hash); }
Compiling login v0.1.0 (/home/vagrant/dev/rust/login)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.34s
Running `target/debug/login`
Ok(“$argon2id$v=19$m=15000,t=2,p=1$ZsxlUs1xh+gmG6VkFrCUBw$lTNPO8Dkp7yrhkRmeuVp7WzWHnf4TAm/HjRUnhQz5T8”)
なんやこれ、ますます迷走してきた…
use argon2::password_hash::{self, SaltString}; use argon2::{Argon2, PasswordHasher, Algorithm, Version, Params, PasswordHash, PasswordVerifier}; fn compute_password_hash(password: String) -> Result<String, password_hash::Error> { let salt = SaltString::generate(&mut rand::thread_rng()); let password_hash = Argon2::new( Algorithm::Argon2id, Version::V0x13, Params::new(15000, 2, 1, None).unwrap(), ) .hash_password(password.as_bytes(), &salt)? .to_string(); Ok(password_hash) } fn verify_password_hash( password: String, expected_password_hash: String, ) -> Result<(), password_hash::Error> { let expected_password_hash = PasswordHash::new(expected_password_hash.as_str())?; Argon2::default().verify_password(password.as_bytes(), &expected_password_hash) } fn main() { let password = "thisispassword".to_string(); let hash = compute_password_hash(password.clone()); println!("{:?}", hash); verify_password_hash(password.clone(), hash.unwrap()); }
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.34s
Running `target/debug/login`
Ok(“$argon2id$v=19$m=15000,t=2,p=1$SN77yEDgYTqh6QT2M9nhEw$5P53ZMpHwg0Ap/S3C2CKsZ8jjEyEPL12gscFrGf80l0”)
まぁ、そりゃそうやろ