use aes::cipher::{
BlockEncryptMut,
BlockDecryptMut,
KeyIvInit,
block_padding::{Pkcs7},
};
use crate::get_md5;
type Aes128CbcEnc = cbc::Encryptor<aes::Aes128Enc>;
type Aes128CbcDec = cbc::Decryptor<aes::Aes128Dec>;
pub struct BadLockCore;
impl BadLockCore {
pub fn encrypt<P>(source: &[u8], password: P) -> Vec<u8>
where
P: AsRef<[u8]>,
{
let code = get_md5!(password);
Aes128CbcEnc::new(&code.into(), &code.into())
.encrypt_padded_vec_mut::<Pkcs7>(source)
}
pub fn decrypt<P>(source: &[u8], password: P) -> Option<Vec<u8>>
where
P: AsRef<[u8]>,
{
let code = get_md5!(password);
Aes128CbcDec::new(&code.into(), &code.into()).decrypt_padded_vec_mut::<Pkcs7>(source).ok()
}
}
#[cfg(test)]
mod unit_test {
#[test]
fn encrypt() {
let source = "hello world".as_bytes();
let code = "1234567890123456";
let encrypted = super::BadLockCore::encrypt(source, code);
println!("{:02x?}", encrypted);
}
#[test]
fn decrypt() {
let source = "hello world".as_bytes();
let code = "1234567890123456";
let encrypted = super::BadLockCore::encrypt(source, code);
let decrypted = super::BadLockCore::decrypt(&encrypted, code);
println!("{:02x?}", decrypted);
}
}