Rust加密解密库magic-crypt的使用,支持高效AES、DES等算法的数据加解密功能
Rust加密解密库magic-crypt的使用,支持高效AES、DES等算法的数据加解密功能
MagicCrypt是一个Java/PHP/NodeJS/Rust的加密解密库,可用于加密/解密字符串、文件或数据,使用数据加密标准(DES)或高级加密标准(AES)算法。它支持CBC块密码模式、PKCS7填充和64、128、192或256位密钥长度。
示例代码
以下是使用magic-crypt进行AES加密解密的示例:
use magic_crypt::{new_magic_crypt, MagicCryptTrait};
let mc = new_magic_crypt!("magickey", 256); // 使用256位密钥
let base64 = mc.encrypt_str_to_base64("http://magiclen.org"); // 加密字符串为Base64
assert_eq!("DS/2U8royDnJDiNY2ps3f6ZoTbpZo8ZtUGYLGEjwLDQ=", base64);
assert_eq!("http://magiclen.org", mc.decrypt_base64_to_string(&base64).unwrap()); // 解密Base64字符串
更改缓冲区大小
encrypt_reader_to_writer
和decrypt_reader_to_writer
方法的默认缓冲区大小为4096字节。如果要更改此大小,可以使用encrypt_reader_to_writer2
或decrypt_reader_to_writer2
方法,并明确定义一个长度。
例如,将缓冲区大小更改为256字节:
use std::io::Cursor;
use base64::Engine;
use magic_crypt::{new_magic_crypt, MagicCryptTrait};
use magic_crypt::generic_array::typenum::U256;
let mc = new_magic_crypt!("magickey", 256);
let mut reader = Cursor::new("http://magiclen.org");
let mut writer = Vec::new();
mc.encrypt_reader_to_writer2::<U256>(&mut reader, &mut writer).unwrap(); // 使用256字节缓冲区加密
let base64 = base64::engine::general_purpose::STANDARD.encode(&writer);
assert_eq!("DS/2U8royDnJDiNY2ps3f6ZoTbpZo8ZtUGYLGEjwLDQ=", base64);
assert_eq!("http://magiclen.org", mc.decrypt_base64_to_string(&base64).unwrap());
无标准库支持
要编译此crate而不使用标准库,请禁用默认功能:
[dependencies.magic-crypt]
version = "*"
default-features = false
完整示例代码
下面是一个更完整的示例,展示如何使用magic-crypt进行AES加密解密:
use magic_crypt::{new_magic_crypt, MagicCryptTrait};
fn main() {
// 1. 创建加密器实例
// 参数1: 密钥 (建议使用强密码)
// 参数2: 密钥位数 (支持64, 128, 192或256)
let mc = new_magic_crypt!("my_super_secure_key_123", 256);
// 2. 要加密的原始数据
let plain_text = "This is a secret message containing sensitive data!";
// 3. 加密数据 (输出为Base64格式)
let encrypted = mc.encrypt_str_to_base64(plain_text);
println!("Encrypted: {}", encrypted);
// 4. 解密数据
let decrypted = mc.decrypt_base64_to_string(&encrypted).unwrap();
println!("Decrypted: {}", decrypted);
// 验证解密结果
assert_eq!(plain_text, decrypted);
// 5. 文件加密示例
// 注意: 实际文件操作需要添加std::fs模块
/*
let file_data = std::fs::read("input.txt").unwrap();
let encrypted_file = mc.encrypt_bytes_to_base64(&file_data);
std::fs::write("encrypted.txt", encrypted_file).unwrap();
let encrypted_content = std::fs::read_to_string("encrypted.txt").unwrap();
let decrypted_content = mc.decrypt_base64_to_bytes(&encrypted_content).unwrap();
std::fs::write("decrypted.txt", decrypted_content).unwrap();
*/
}
特性
- 支持AES和DES算法
- 支持CBC块密码模式
- 支持PKCS7填充
- 支持64、128、192和256位密钥长度
- 提供字符串、字节和文件流的加密解密方法
- 支持无标准库环境
要使用此库,请在Cargo.toml中添加依赖:
[dependencies]
magic-crypt = "4.0.1"
完整Demo示例
基于上述内容,这里提供一个更完整的演示示例,展示字符串加密解密和文件加密解密的完整流程:
use magic_crypt::{new_magic_crypt, MagicCryptTrait};
use std::fs;
fn main() {
// 1. 初始化加密器
// 参数1: 自定义密钥(建议至少16个字符)
// 参数2: 密钥长度(256位)
let encryptor = new_magic_crypt!("my_very_secret_password_1234!", 256);
// 2. 字符串加密解密演示
let secret_message = "这是需要加密的敏感信息";
// 加密为Base64字符串
let encrypted = encryptor.encrypt_str_to_base64(secret_message);
println!("加密后的字符串: {}", encrypted);
// 解密Base64字符串
let decrypted = encryptor.decrypt_base64_to_string(&encrypted).unwrap();
println!("解密后的字符串: {}", decrypted);
assert_eq!(secret_message, decrypted);
// 3. 文件加密解密演示
let input_file = "plaintext.txt";
let encrypted_file = "encrypted.bin";
let decrypted_file = "decrypted.txt";
// 写入测试文件
fs::write(input_file, "这是文件中的敏感内容").unwrap();
// 加密文件
let file_data = fs::read(input_file).unwrap();
let encrypted_data = encryptor.encrypt_bytes_to_base64(&file_data);
fs::write(encrypted_file, encrypted_data).unwrap();
// 解密文件
let encrypted_content = fs::read_to_string(encrypted_file).unwrap();
let decrypted_content = encryptor.decrypt_base64_to_bytes(&encrypted_content).unwrap();
fs::write(decrypted_file, decrypted_content).unwrap();
// 验证文件内容
let final_content = fs::read_to_string(decrypted_file).unwrap();
assert_eq!("这是文件中的敏感内容", final_content);
println!("文件加密解密测试完成!");
}
注意:使用文件操作功能时,需要在Cargo.toml中添加std::fs模块的依赖。
Rust加密解密库magic-crypt使用指南
magic-crypt
是一个简单易用的Rust加密解密库,支持多种对称加密算法包括AES、DES等,适合需要快速实现数据加解密功能的场景。
主要特性
- 支持AES-128/AES-192/AES-256加密
- 支持DES/3DES加密
- 提供简单的API接口
- 支持字符串和二进制数据加密
安装
在Cargo.toml
中添加依赖:
[dependencies]
magic-crypt = "3.1"
基本使用方法
1. 加密字符串
use magic_crypt::{MagicCryptTrait, new_magic_crypt};
let mc = new_magic_crypt!("magickey", 256); // 256-bit AES加密
let encrypted = mc.encrypt_str_to_base64("Hello, world!");
println!("加密结果: {}", encrypted);
2. 解密字符串
let decrypted = mc.decrypt_base64_to_string(&encrypted).unwrap();
println!("解密结果: {}", decrypted);
3. 使用不同算法
// 使用128位AES
let mc_aes128 = new_magic_crypt!("key123", 128);
// 使用DES
let mc_des = new_magic_crypt!("deskey", 64); // DES需要64位(8字节)密钥
4. 加密二进制数据
let data = vec![1, 2, 3, 4, 5];
let encrypted_data = mc.encrypt_bytes(&data);
let decrypted_data = mc.decrypt_bytes(&encrypted_data).unwrap();
高级用法
自定义IV(初始化向量)
use magic_crypt::MagicCrypt;
let mc = MagicCrypt::new_with_iv("mykey", 256, "iv12345678901234"); // IV必须是16字节
文件加密
use std::fs;
// 加密文件
let file_data = fs::read("plain.txt").unwrap();
let encrypted = mc.encrypt_bytes(&file_data);
fs::write("encrypted.dat", encrypted).unwrap();
// 解密文件
let encrypted_data = fs::read("encrypted.dat").unwrap();
let decrypted = mc.decrypt_bytes(&encrypted_data).unwrap();
fs::write("decrypted.txt", decrypted).unwrap();
完整示例代码
use magic_crypt::{MagicCryptTrait, new_magic_crypt};
use std::fs;
fn main() {
// 1. 字符串加密解密示例
let mc = new_magic_crypt!("magickey", 256); // 256-bit AES
// 加密字符串
let plaintext = "这是一段需要加密的敏感数据";
let encrypted = mc.encrypt_str_to_base64(plaintext);
println!("加密后的字符串: {}", encrypted);
// 解密字符串
let decrypted = mc.decrypt_base64_to_string(&encrypted).unwrap();
println!("解密后的字符串: {}", decrypted);
// 2. 使用不同算法示例
let mc_aes128 = new_magic_crypt!("aes128key12345678", 128); // AES-128需要16字节密钥
let mc_des = new_magic_crypt!("deskey78", 64); // DES需要8字节密钥
// 3. 二进制数据加密示例
let binary_data = vec![0x01, 0x02, 0x03, 0x04, 0x05];
let encrypted_binary = mc.encrypt_bytes(&binary_data);
let decrypted_binary = mc.decrypt_bytes(&encrypted_binary).unwrap();
println!("解密后的二进制数据: {:?}", decrypted_binary);
// 4. 文件加密示例
// 写入测试文件
fs::write("test.txt", "文件加密测试内容").unwrap();
// 加密文件
let file_data = fs::read("test.txt").unwrap();
let encrypted_file = mc.encrypt_bytes(&file_data);
fs::write("test.enc", encrypted_file).unwrap();
// 解密文件
let encrypted_data = fs::read("test.enc").unwrap();
let decrypted_file = mc.decrypt_bytes(&encrypted_data).unwrap();
fs::write("test_decrypted.txt", decrypted_file).unwrap();
// 5. 自定义IV示例
use magic_crypt::MagicCrypt;
let mc_custom_iv = MagicCrypt::new_with_iv(
"customkey12345678901234567890", // 32字节密钥(AES-256)
256,
"randomiv12345678" // 16字节IV
);
let custom_encrypted = mc_custom_iv.encrypt_str_to_base64("使用自定义IV加密");
println!("自定义IV加密结果: {}", custom_encrypted);
}
注意事项
-
密钥长度必须匹配算法要求:
- AES-128: 16字节
- AES-192: 24字节
- AES-256: 32字节
- DES: 8字节
- 3DES: 24字节
-
对于生产环境使用,建议使用更专业的加密库如
rust-openssl
或ring
-
初始化向量(IV)应该是随机且唯一的,不要使用固定值
magic-crypt
提供了简单易用的API,适合快速开发和原型设计,但对于高安全性要求的场景,建议评估更专业的加密解决方案。