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 |
|
#36 in #io-operations
每月64次下载
在 2 crates 中使用
26KB
340 代码行
AES Stream
许可证
许可协议为以下之一
- Apache License,版本2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
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