用的是aes,非rust-crypto。
因为我在使用rust-crypto的时候,写出来的代码编译不成wasm。很奇怪,看到StackOverflow上的回答好像是这个库已经很久没人更新了。建议不要使用这个库。
请指正!
# 需要使用这几个
base64 = "0.13.0"
cbc = "0.1.2"
aes = "0.8"
use base64::{encode, decode};
use aes::cipher::{block_padding::Pkcs7, BlockDecryptMut, BlockEncryptMut, generic_array::GenericArray, KeyInit,};
use aes::{Aes128Enc, Aes128Dec};
const KEY: &[u8; 16] = b"1234567890123456"; // 密钥---16位
pub fn encrypt(plain: String) -> Vec<u8> {
let plain_bytes = plain.as_bytes();
let size = if plain.len() % 16 == 0 {
plain.len() + 16
} else {
((plain.len() / 16) + 1) * 16
};
let mut buf = vec![0u8; size];
let pt_len = plain.len();
buf[..pt_len].copy_from_slice(plain_bytes);
let key = GenericArray::from(KEY.clone());
let ct = Aes128Enc::new(&key)
.encrypt_padded_b2b_mut::<Pkcs7>(plain_bytes, &mut buf)
.unwrap();
ct.to_vec()
}
/// 解密
pub fn decrypt(cipher_byte: Vec<u8>) -> Vec<u8> {
let mut vec_buf = vec![0u8; cipher_byte.len()];
vec_buf[..cipher_byte.len()].copy_from_slice(&cipher_byte);
let key = GenericArray::from(KEY.clone());
let pt = Aes128Dec::new(&key)
.decrypt_padded_b2b_mut::<Pkcs7>(&cipher_byte, &mut vec_buf)
.unwrap();
pt.to_vec()
}
fn main(){
println!("{}",encode(encrypt("qwertyuiop".to_string())));
let ming = decrypt(decode("19k9CrYcvnH9rumP48WRBw==").unwrap());
println!("{}",String::from_utf8(ming).unwrap());
}