这个错误表明密钥或初始向量 (IV) 的长度不正确。对于 AES-128 加密,密钥和 IV 的长度必须是 16 字节(128 位)。在之前的示例中,密钥和 IV 的长度是 15 字节,这是不正确的。
我们需要确保密钥和 IV 的长度都是 16 字节。以下是修正后的代码:
步骤 1:添加依赖项
在你的 Cargo.toml
文件中添加 aes
、block-modes
和 hex
依赖项:
[dependencies]
aes = "0.7"
block-modes = "0.8"
hex = "0.4"
步骤 2:编写示例代码
在 src/main.rs
文件中编写代码,演示如何使用 aes
crate 进行 AES 加密和解密:
src/main.rs
extern crate aes;
extern crate block_modes;
extern crate hex;
use aes::Aes128;
use block_modes::{BlockMode, Cbc};
use block_modes::block_padding::Pkcs7;
use std::str;
// 创建类型别名
type Aes128Cbc = Cbc<Aes128, Pkcs7>;
fn main() {
// 密钥和初始向量 (IV)
let key = b"anexamplekey1234"; // 16 字节密钥
let iv = b"anexampleiv123456"; // 16 字节 IV
// 要加密的中文明文
let plaintext = "你好,世界!";
// 将明文转换为字节数组
let plaintext_bytes = plaintext.as_bytes();
// 创建加密器
let cipher = Aes128Cbc::new_from_slices(key, iv).unwrap();
// 加密
let ciphertext = cipher.encrypt_vec(plaintext_bytes);
println!("Ciphertext: {}", hex::encode(&ciphertext));
// 创建解密器
let cipher = Aes128Cbc::new_from_slices(key, iv).unwrap();
// 解密
let decrypted_ciphertext = cipher.decrypt_vec(&ciphertext).unwrap();
let decrypted_text = str::from_utf8(&decrypted_ciphertext).unwrap();
println!("Decrypted text: {}", decrypted_text);
}
解释
导入模块:
- 使用
extern crate
导入aes
、block_modes
和hex
crate。 - 使用
use
语句导入所需的模块和类型。
- 使用
创建类型别名:
- 使用
type Aes128Cbc = Cbc<Aes128, Pkcs7>;
创建一个类型别名,表示使用 AES-128 算法和 PKCS7 填充的 CBC 模式。
- 使用
定义密钥和初始向量 (IV):
- 定义一个 16 字节的密钥和初始向量 (IV)。
要加密的中文明文:
- 定义要加密的中文明文字符串。
将明文转换为字节数组:
- 使用
plaintext.as_bytes()
方法将明文字符串转换为字节数组。
- 使用
创建加密器:
- 使用
Aes128Cbc::new_from_slices(key, iv).unwrap();
创建一个加密器实例。
- 使用
加密:
- 使用
cipher.encrypt_vec(plaintext_bytes);
方法加密明文字节数组,并将结果转换为十六进制字符串打印出来。
- 使用
创建解密器:
- 使用
Aes128Cbc::new_from_slices(key, iv).unwrap();
创建一个解密器实例。
- 使用
解密:
- 使用
cipher.decrypt_vec(&ciphertext).unwrap();
方法解密密文字节数组,并将结果转换为字符串打印出来。
- 使用
编译和运行
- 在项目根目录下运行
cargo build
进行编译。 - 编译成功后,运行
cargo run
以执行程序。
通过这些步骤,你可以在 Rust 中使用 aes
和 block-modes
crate 进行 AES 加密和解密。如果你遇到任何问题,请确保你已经正确配置了 Rust 项目,并且 aes
和 block-modes
crate 已正确安装。
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询