use base64::Engine;
use base64::engine::general_purpose::STANDARD as BASE64;
use encryption::{factory::EncryptionManagerFactory, pet};
fn main() -> Result<(), encryption::error::Error> {
println!("{}", pet::ASCII);
println!("{} · {}\n", pet::NAME, pet::TAGLINE);
let master_key: [u8; 32] = *b"encryption-rust-demo-master-key!";
let manager = EncryptionManagerFactory::from_master_key(&master_key, "aes-256-gcm")?;
println!("已注册算法: {:?}", manager.registry().identifiers());
let phone = "13800138000";
let stored = BASE64.encode(manager.encrypt(phone.as_bytes())?);
println!("\n入库值: {stored}");
let read_back = BASE64.decode(&stored).unwrap();
let decrypted = manager.decrypt(&read_back)?;
println!("解出原文: {}", String::from_utf8_lossy(&decrypted));
let blob = manager.encrypt_with("sm4-cbc", phone.as_bytes())?;
println!("SM4 密文长度: {} 字节", blob.len());
let mut tampered = manager.encrypt(phone.as_bytes())?;
let last = tampered.len() - 1;
tampered[last] ^= 0x01;
match manager.decrypt(&tampered) {
Ok(_) => println!("篡改未被发现——不该发生!"),
Err(error) => println!("篡改被拒绝: {error}"),
}
Ok(())
}