0.99.0 2021年2月3日
0.2.3 2019年10月22日
0.2.1 2019年8月19日
0.1.0 2019年6月24日
0.0.0 2019年6月23日

#7 in #ciphertext

Download history 317/week @ 2024-03-14 467/week @ 2024-03-21 440/week @ 2024-03-28 374/week @ 2024-04-04 445/week @ 2024-04-11 438/week @ 2024-04-18 448/week @ 2024-04-25 378/week @ 2024-05-02 370/week @ 2024-05-09 400/week @ 2024-05-16 456/week @ 2024-05-23 448/week @ 2024-05-30 377/week @ 2024-06-06 337/week @ 2024-06-13 350/week @ 2024-06-20 295/week @ 2024-06-27

1,411 下载/每月

MIT/Apache

2KB

RustCrypto: 流密码

Project Chat dependency status Apache2/MIT licensed HAZMAT

纯Rust编写的流密码集合。

⚠️ 安全警告: 危险品!

该存储库中的这些crate不保证密文是真实的(即通过使用MAC来验证密文的完整性),如果使用不当,可能会导致严重漏洞!

除了 chacha20 crate之外,该存储库中的任何crate都尚未接受任何正式的密码学和安全审查/审计。

自行承担风险!

crate

名称 crate名称 Crates.io 文档 MSRV 安全
ChaCha chacha20 crates.io Documentation MSRV 1.65 💚
HC-256 hc-256 crates.io Documentation MSRV 1.65 💛
Rabbit rabbit crates.io Documentation MSRV 1.65 💛
RC4 rc4 crates.io Documentation MSRV 1.65 💔
Salsa20 salsa20 crates.io Documentation MSRV 1.65 💚

安全级别图例

以下描述了与每个散列函数(即算法,而不是特定实现)相关的安全级别评分

心形 描述
💚 没有已知成功的攻击
💛 理论突破:安全级别低于声称的
💔 实际中展示了攻击:尽可能避免

最小支持的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许可证定义的任何有意提交的工作贡献,均应按上述方式双许可,不得附加任何额外条款或条件。

无运行时依赖