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”)
まぁ、そりゃそうやろ