Rust AES CBC加密解密
[dependencies]
aes = "0.7.5"
block-modes = "0.8.1"
hex-literal = "0.2.1"
rand = "0.8.4"
bytebuffer = "0.2.1"
base64 = "0.13.0"
主要代码:
use aes::Aes256;
use block_modes::{BlockMode, Cbc};
use block_modes::block_padding::Pkcs7;
use rand::seq::SliceRandom;
type AesCbc = Cbc<Aes256, Pkcs7>;
const BASE_STR: &str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <br><br>fn gen_ascii_chars (size: usize) -> String { let mut rng = &mut rand:: thread_rng (); String:: from_utf8 ( BASE_STR.as_bytes () .choose_multiple (&mut rng, size) .cloned () .collect () ) .unwrap () } fn encrypt (key: &str, data: &str) -> String { let iv_str = gen_ascii_chars (16); let iv = iv_str.as_bytes (); let cipher = AesCbc:: new_from_slices ( key.as_bytes (), iv) .unwrap (); let ciphertext = cipher.encrypt_vec ( data.as_bytes ()); let mut buffer = bytebuffer::ByteBuffer:: from_bytes (iv); buffer.write_bytes (&ciphertext); base64:: encode ( buffer.to_bytes ()) } fn decrypt (key: &str, data: &str) -> String { let bytes = base64:: decode (data) .unwrap (); let cipher = AesCbc:: new_from_slices ( key.as_bytes (), &bytes[0..16]) .unwrap (); String:: from_utf8 ( cipher.decrypt_vec (&bytes[16..]) .unwrap ()) .unwrap () } |
使用:
1 2 3 4 5 6 7 8 9 | fn main () { let plaintext = "hello world" ; let key = "01234567012345670123456701234567" ; let enc = encrypt (key, plaintext); println!( "{}" , enc); let dec = decrypt (key, &enc); assert_eq!(plaintext, enc); println!( "{}" , dec); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2021-05-26 .net 5.0 发布命令总结