add some method for argon2 password hash
This commit is contained in:
parent
bcbba724f7
commit
5109226cda
@ -1 +1,2 @@
|
||||
pub mod pass_utils;
|
||||
pub mod str_utils;
|
||||
|
36
src/utils/pass_utils.rs
Normal file
36
src/utils/pass_utils.rs
Normal file
@ -0,0 +1,36 @@
|
||||
use argon2::{
|
||||
password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
|
||||
Argon2,
|
||||
};
|
||||
use base64::{engine::general_purpose, Engine as _};
|
||||
use std::str;
|
||||
|
||||
pub fn hash_password(pass: &str) -> String {
|
||||
let salt: SaltString = SaltString::generate(&mut OsRng);
|
||||
let password = pass.as_bytes();
|
||||
let password_hash: String = match Argon2::default().hash_password(password, &salt) {
|
||||
Ok(v) => v.to_string(),
|
||||
Err(e) => panic!("error hash password: {}", e),
|
||||
};
|
||||
general_purpose::STANDARD_NO_PAD.encode(&password_hash)
|
||||
}
|
||||
|
||||
pub fn verify_password(pass: &str, password_hash: &str) -> bool {
|
||||
let str_tmp = match general_purpose::STANDARD_NO_PAD.decode(password_hash) {
|
||||
Ok(v) => v,
|
||||
Err(e) => panic!("error decode base64 str: {}", e),
|
||||
};
|
||||
let s = match str::from_utf8(&str_tmp) {
|
||||
Ok(v) => v,
|
||||
Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
|
||||
};
|
||||
let parsed_hash = match PasswordHash::new(&s) {
|
||||
Ok(v) => v,
|
||||
Err(e) => panic!("error parse password hash: {}", e),
|
||||
};
|
||||
|
||||
let password = pass.as_bytes();
|
||||
Argon2::default()
|
||||
.verify_password(password, &parsed_hash)
|
||||
.is_ok()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user