3个版本
0.1.2 | 2023年8月29日 |
---|---|
0.1.1 | 2023年7月19日 |
0.1.0 | 2023年7月18日 |
2103 在 密码学 分类中
每月 29 次下载
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