#aes #read-write #write #read #encryption-decryption #stream #io-operations

aes-stream

输入/输出操作期间AES加密和解密的读写包装器

4个版本

使用旧的Rust 2015

0.2.1 2017年7月3日
0.2.0 2017年7月2日
0.1.2 2017年7月2日
0.1.1 2017年7月1日
0.1.0 2017年7月1日

#36 in #io-operations

Download history 22/week @ 2024-03-17 27/week @ 2024-03-24 52/week @ 2024-03-31 20/week @ 2024-04-07 25/week @ 2024-04-14 26/week @ 2024-04-21 22/week @ 2024-04-28 22/week @ 2024-05-05 21/week @ 2024-05-12 26/week @ 2024-05-19 24/week @ 2024-05-26 26/week @ 2024-06-02 18/week @ 2024-06-09 20/week @ 2024-06-16 20/week @ 2024-06-23 2/week @ 2024-06-30

每月64次下载
2 crates 中使用

MIT/Apache

26KB
340 代码行

AES Stream

许可证

许可协议为以下之一

由您选择。


lib.rs:

输入/输出操作期间AES加密和解密的读写包装器

此crate提供了一个 AesWriter,可用于使用AES加密包装任何现有的 Write 实现,以及 AesReader,可用于包装任何现有的 Read 实现,并使用AES解密。如果内部读取器提供了 Seek 实现,AesReader也将这样做。请参阅它们的结构级别文档以获取更多信息。

事实上,这个crate不仅限于AES。它可以包装任何类型的 BlockEncryptor,即具有CBC的 BlockDecryptor

示例

所有示例都使用以下extern crates和导入

extern crate crypto;
extern crate rand;
extern crate aesstream;

use std::io::{Read, Write, Cursor};
use std::fs::File;
use crypto::aessafe::{AesSafe128Encryptor, AesSafe128Decryptor};
use rand::{Rng, OsRng};
use aesstream::{AesWriter, AesReader};

您可以使用 AesWriter 加密文件。

let key: [u8; 16] = OsRng::new()?.gen();
let file = File::create("...")?;
let encryptor = AesSafe128Encryptor::new(&key);
let mut writer = AesWriter::new(file, encryptor)?;
writer.write_all("Hello World!".as_bytes())?;

然后使用 AesReader 再次解密它。

let key: [u8; 16] = OsRng::new()?.gen();
let file = File::open("...")?;
let decryptor = AesSafe128Decryptor::new(&key);
let mut reader = AesReader::new(file, decryptor)?;
let mut decrypted = String::new();
reader.read_to_string(&mut decrypted)?;
assert_eq!(decrypted, "Hello World!");

它们也可以用于内存中的加密和解密。

let key: [u8; 16] = OsRng::new()?.gen();
let encryptor = AesSafe128Encryptor::new(&key);
let mut encrypted = Vec::new();
{
    let mut writer = AesWriter::new(&mut encrypted, encryptor)?;
    writer.write_all("Hello World!".as_bytes())?;
}
let decryptor = AesSafe128Decryptor::new(&key);
let mut reader = AesReader::new(Cursor::new(encrypted), decryptor)?;
let mut decrypted = String::new();
reader.read_to_string(&mut decrypted)?;
assert_eq!(decrypted, "Hello World!");

依赖关系

~4MB
~50K SLoC