0.99.0 |
|
---|---|
0.2.3 |
|
0.2.1 |
|
0.1.0 |
|
0.0.0 |
|
#7 in #ciphertext
1,411 下载/每月
2KB
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许可证定义的任何有意提交的工作贡献,均应按上述方式双许可,不得附加任何额外条款或条件。