3个版本
使用旧的Rust 2015
0.1.2 | 2017年9月5日 |
---|---|
0.1.1 | 2017年8月5日 |
0.1.0 | 2017年8月5日 |
1443 in 加密学
7KB
这是一个SPECK密码的Cipher Block Chaining (CBC)模式的Rust实现。
除非你确切知道自己在做什么,否则不要使用此库,因为某些情况下存在针对CBC模式的实际攻击。
示例
#
use rand::{Rng, OsRng};
use byteorder::NetworkEndian;
// This should probably be derived from an exchanged key or a password.
let key = [0u8; speck_cbc::BLOCK_SIZE];
let input = b"This is a test.";
let mut buffer: Vec<u8> = input.to_vec();
// Sender.
let mut iv = [0u8; speck_cbc::BLOCK_SIZE];
OsRng::new()?.fill_bytes(&mut iv);
pkcs7::pad(&mut buffer, speck_cbc::BLOCK_SIZE as u8);
speck_cbc::encrypt::<NetworkEndian>(&mut buffer, &key, &iv);
// Message authenticity needs to be provided between `encrypt` and `decrypt`.
// Receiver.
speck_cbc::decrypt::<NetworkEndian>(&mut buffer, &key, &iv);
pkcs7::un_pad(&mut buffer);
assert_eq!(buffer.as_slice(), input);
依赖项
~125KB