3个版本

0.1.2 2023年8月29日
0.1.1 2023年7月19日
0.1.0 2023年7月18日

2103密码学 分类中

每月 29 次下载

MIT/Apache

19KB
354

RC5分组密码

在Rust中实现的基本RC5分组密码库。RC5与经典密码(如AES)不同之处在于它允许参数化算法,并在不同硬件上优化安全性和效率。

这些参数包括

  • w:字长(字节)
  • r:轮数
  • b:密钥长度(字节)

每个参数的选择应优先考虑选择其他用例的标准。例如,字长 w 可以是任意字节数,但为了性能和安全性的推荐是应该是2的幂,甚至更好的是8的幂。这样就可以更有效地使用硬件寄存器,例如32位或64位寄存器,具有向量化的可能性(Intel上的AVX或ARM上的SVE)。

这个RC5实现只为标准值 w(8的幂)设计,并使用标准的Rust类型:u8, u16, u32, u64, u128。

示例:加密

use rc5_cipher::encrypt;

let rounds = 12;
let key = vec![
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
    0x0E, 0x0F,
];
let pt = [0x33221100u32, 0x77665544];

let ct = encrypt(pt, &key, rounds);

assert_eq!(ct, [0x9B14DC2Du32, 0x9E8B08CF]);

示例:解密

use rc5_cipher::decrypt;

let rounds = 12;
let key = vec![
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
    0x0E, 0x0F,
];
let ct = [0x9B14DC2Du32, 0x9E8B08CF];

let pt = decrypt(ct, &key, rounds);

assert_eq!(pt, [0x33221100u32, 0x77665544]);

参考文献

依赖项

~465KB