1个不稳定版本
使用旧Rust 2015
0.0.0 | 2019年10月22日 |
---|
#36 in #stream-cipher
7KB
RustCrypto: 流密码
纯Rust编写的流密码集合。
⚠️ 安全警告: 危险品!
此存储库中的Crate不确保密文是真实的(即通过使用MAC来验证密文完整性),如果使用不当可能会导致严重漏洞!
除了chacha20
crate外,此存储库中的其他Crate尚未接受任何正式的加密和安全审查/审计。
自行承担风险!
Crate
名称 | Crate名称 | Crates.io | 文档 | MSRV | 安全 |
---|---|---|---|---|---|
ChaCha | chacha20 |
💚 | |||
HC-256 | hc-256 |
💛 | |||
Rabbit | rabbit |
💛 | |||
RC4 | rc4 |
💔 | |||
Salsa20 | salsa20 |
💚 |
安全级别图例
以下描述了与每个哈希函数(即算法,而不是特定实现)相关的安全级别评分。
心形 | 描述 |
---|---|
💚 | 没有已知的成功攻击 |
💛 | 理论破解:安全性低于声称的 |
💔 | 实践中已演示攻击:尽可能避免 |
最小支持的Rust版本(MSRV)策略
MSRV提升被视为破坏性变更,并且只有在次要版本提升的情况下才会执行。
示例
Crate功能以在cipher
crate中定义的特性为依据。
让我们用ChaCha20来演示同步流密码的使用方法
use chacha20::ChaCha20;
// Import relevant traits
use chacha20::cipher::{KeyIvInit, StreamCipher, StreamCipherSeek};
use hex_literal::hex;
let key = [0x42; 32];
let nonce = [0x24; 12];
let plaintext = hex!("00010203 04050607 08090a0b 0c0d0e0f");
let ciphertext = hex!("e405626e 4f1236b3 670ee428 332ea20e");
// Key and IV must be references to the `GenericArray` type.
// Here we use the `Into` trait to convert arrays into it.
let mut cipher = ChaCha20::new(&key.into(), &nonce.into());
let mut buffer = plaintext.clone();
// apply keystream (encrypt)
cipher.apply_keystream(&mut buffer);
assert_eq!(buffer, ciphertext);
let ciphertext = buffer.clone();
// ChaCha ciphers support seeking
cipher.seek(0u32);
// decrypt ciphertext by applying keystream again
cipher.apply_keystream(&mut buffer);
assert_eq!(buffer, plaintext);
// stream ciphers can be used with streaming messages
cipher.seek(0u32);
for chunk in buffer.chunks_mut(3) {
cipher.apply_keystream(chunk);
}
assert_eq!(buffer, ciphertext);
许可协议
所有Crate均受以下任一许可协议的许可:
任选其一。
贡献
除非你明确表示,否则任何有意提交以包含在你提交的工作中的贡献,根据Apache-2.0许可证定义,应如上所述双许可,不附加任何额外条款或条件。
依赖关系
~12KB