3个版本

0.1.2 2023年6月1日
0.1.1 2023年6月1日
0.1.0 2023年6月1日

#931加密学

每月 27 次下载

GPL-3.0 许可证

17KB
255

RC5加密算法的Rust实现

此包实现了Ronald Rivest在此论文中描述的RC5算法:[链接](https://www.grc.com/r&d/rc5.pdf)

构建

在此项目的根目录下运行

$ cargo build

运行测试

在此项目的根目录下运行

$ cargo test

这将运行所有单元测试和文档测试。

使用方法

使用此包最简单的方法是调用encrypt_defaultdecrypt_default函数。它们将使用算法的RC5/32/12/16变体来加密或解密字节数组,这是作者推荐的变体。

use rc5::{encrypt_default, decrypt_default};
let key = [
  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
  0x0C, 0x0D, 0x0E, 0x0F,
];

let pt = vec![0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77];

let ct = encrypt_default(key, &pt).unwrap();
let res = decrypt_default(key, &ct).unwrap();

assert_ne!(pt, ct);
assert_eq!(pt, res);

如果您要加密或解密大量数据,则最好使用上下文对象以节省密钥生成步骤的时间,并在所有加密/解密调用中仅提前执行一次。

let context = rc5::Context::new(key, rounds)?;
let ciphertext = context.encrypt(&plaintext)?;
let plaintext = context.decrypt(&ciphertext)?;

Context类型可以按以下方式参数化

  • 应指定字大小为类型参数W(默认为u32
let context = rc5::Context::<u64>::new(key, rounds)?;
  • 轮数是Context构造函数上的参数。
  • 密钥大小是构造函数中key参数中字向量的大小。

许可证

GPL-3

依赖关系

~0.7–1.3MB
~28K SLoC