最近一直在研究在rust里使用AES以及各种加密模式。然而,rust里目前的第三方库比较多,而且使用起来也并不容易上手。因此,本文记录rust里AES加密算法不同模式的基本实现方式。
AES CTR
Cargo.toml
hex-literal = "0.3.4"
aes = "0.8"
ctr = "0.9"
注意:
- ctr 是block-modes 下推荐的库:
本小节的代码也是参考ctr文档中的:
use aes::cipher::{
KeyIvInit, StreamCipher, StreamCipherSeek};
use hex_literal::hex;
type Aes128Ctr64LE = ctr::Ctr64LE<aes::Aes128>;
fn main() {
let key = [0x42; 16];
let iv = [0x24; 16];
let plaintext = *b"hello world! this is my plaintext.";
let ciphertext = hex!("3357121ebb5a29468bd861467596ce3da59bdee42dcc0614dea955368d8a5dc0cad4");
// encrypt in-place
let mut buf = plaintext.to_vec();