Expand description
FPE(Format-Preserving Encryption)保留格式加密
基于 FNR(Flexible Naor-Reingold)算法,使用 SM4 作为底层密码:
- 支持 1~128 位任意长度的明密文域
- 明密文在同一域内(位数相同)
- 支持 tweak(调整值)参数化加密
§使用示例
use libsmx::fpe::FpeKey;
let key = [0u8; 16];
let fpe = FpeKey::new(&key, 32).unwrap(); // 32 位域(如 IPv4 地址)
let tweak = fpe.expand_tweak(b"my-tweak");
let plaintext: u32 = 192_168_1_100; // 某 IPv4 地址
let mut data = plaintext.to_be_bytes();
let mut block = [0u8; 16];
block[..4].copy_from_slice(&data);
fpe.encrypt(&tweak, &mut block);
fpe.decrypt(&tweak, &mut block);
assert_eq!(&block[..4], &data);