#regex #encryption #fpe

field-encryption

用于格式化字段加密的库

2个版本

0.0.1 2022年11月9日
0.0.0 2022年11月8日

#459 in #regex

MIT 许可证

20KB
426 代码行

字段加密

此库提供了一个FieldEncryption结构体,允许将输入格式的值加密为输出格式的值,其中输入和输出格式由正则表达式描述。因此,它类似于格式保持加密方案,但允许加密字段的格式具有灵活性。

use field_encryption::FieldEncryption;

let fe = FieldEncryption::new(r"[A-Z][a-z]{1,4} [A-Z][a-z]{1-4}!", r"[a-z]{5} [a-z]{7}", &[0;32]).unwrap();
let cipher_text = fe.encrypt("Hello World!").unwrap();
println!("{}", cipher_text);
let plain_text = fe.decrypt(&cipher_text).unwrap(); 
println!("{}", plain_text);

输出

qtzwe mcdzozq
Hello World!

实现基于Black和Rogaway(2002年)的《具有任意有限域的密码》论文,工作原理如下

  • 计算输入正则表达式变体的输入偏移量
  • 使用Fiestal网络将偏移量加密到输出正则表达式的域中
    • 使用论文中概述的“循环遍历”方法到达内部值
  • 加密输出用作输出正则表达式变体的偏移量'n'
  • 返回输出正则表达式的第n个变体作为密文

用途

此库可能有助于以符合现有数据模式的方式标记数据字段,例如,以匿名化数据集。

限制

  • 我不是密码学家!无论如何都无法保证此库是密码学安全的。

依赖关系

~4.5MB
~54K SLoC