在Rust中处理加密和解密,你可以使用第三方库,如ring
、aes
或cryptography
等。这里我将展示如何使用ring
库进行AES加密和解密。首先,你需要在Cargo.toml
文件中添加依赖:
[dependencies] ring = "0.16.14"
接下来,你可以使用以下代码进行AES加密和解密:
use ring::aead::{self, Aad, Nonce, UnboundKey, AES}; use ring::rand::SystemRandom; use std::error::Error; fn main() -> Result<(), Box> { // 生成一个随机的密钥 let key = UnboundKey::new(&AES, b"an example very very secret key.")?; // 创建一个随机的nonce let nonce = aead::Nonce::try_from(&[0; 12])?; // 要加密的数据 let plaintext = b"Hello, world!"; // 加密数据 let ciphertext = encrypt(key.clone(), nonce.clone(), plaintext)?; println!("Encrypted text: {:?}", ciphertext); // 解密数据 let decrypted_text = decrypt(key, nonce, ciphertext)?; println!("Decrypted text: {:?}", String::from_utf8_lossy(&decrypted_text)); Ok(()) } fn encrypt( key: UnboundKey, nonce: Nonce, plaintext: &[u8], ) -> Result , Box > { let mut buffer = Vec::new(); buffer.extend_from_slice(plaintext); let ciphertext = key.encrypt( nonce, Aad::empty(), &mut buffer, ring::aead::EncryptionPadding::Pkcs7, )?; Ok(ciphertext) } fn decrypt( key: UnboundKey, nonce: Nonce, ciphertext: &[u8], ) -> Result , Box > { let mut buffer = Vec::with_capacity(ciphertext.len()); buffer.extend_from_slice(ciphertext); let plaintext = key.decrypt( nonce, Aad::empty(), &mut buffer, ring::aead::DecryptionPadding::Pkcs7, )?; Ok(plaintext) }
这个示例使用了AES加密算法,CBC模式和PKCS7填充。你可以根据需要调整这些参数。请注意,这个示例仅用于演示目的,实际应用中请确保使用安全的密钥和随机数生成器。