使用Hutool在Java中实现FPE(Format Preserving Encryption)格式保留加密算法

FPE介绍

FPE(Format Preserving Encryption) 格式保留加密是一种格式保持与明文相同的加密方式,通常用于数据脱敏。

例如对于敏感的数据信息,如电话号码(13位数字),FPE算法算法加依旧是13位数字,因此这种特性可以不用变更数据库中字段格式,有利于传播。

除了这些优点,还具有:

  • 数据长度不变。加密前长度是N,加密后长度仍然是N
  • 数据类型不变,加密前是数字类型,加密后仍然是数字类型。
  • 加密过程可逆,加密后的数据可以通过密钥解密还原原始数据。

注:此段引用自《大数据时代下的隐私保护(三)》

更详细的介绍见:

算法实现

由于JDK(JRE)未提供的FPE实现,我们需要借助BouncyCastle库来完成工作,首先当然是引入Hutool

<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.7.12</version>
</dependency>

再引入BouncyCastle

<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcprov-jdk15to18</artifactId>
	<version>1.69</version>
</dependency>

FF1算法实现

// 映射字符表,规定了明文和密文的字符范围
BasicAlphabetMapper numberMapper = new BasicAlphabetMapper("0123456789");

// 初始化 aes 密钥(随机),长度必须是16bytes、24bytes或32bytes
byte[] keyBytes = RandomUtil.randomBytes(16);

final FPE fpe = new FPE(FPE.FPEMode.FF1, keyBytes, numberMapper, 
	// Tweak是为了解决因局部加密而导致结果冲突问题,通常情况下将数据的不可变部分作为Tweak,null则使用默认长度全是0的bytes
	null);

String phone = "13534534567";

// 加密
String encrypt = fpe.encrypt(phone);
// 解密
String decrypt = fpe.decrypt(encrypt);

FF3算法实现

// 映射字符表,规定了明文和密文的字符范围
BasicAlphabetMapper numberMapper = new BasicAlphabetMapper("0123456789");

// 初始化 aes 密钥(随机)
byte[] keyBytes = RandomUtil.randomBytes(16);

FPE fpe = new FPE(FPE.FPEMode.FF3_1, keyBytes, numberMapper, 
	  // 此处FF3规定tweak为56bit(即7bytes)
	  new byte[7]);

String phone = "13534534567";

// 加密
String encrypt = fpe.encrypt(phone);
// 解密
String decrypt = fpe.decrypt(encrypt);

相比于AES等加密算法,FPE增加BasicAlphabetMapper,即有限字母的字典表。

Alphabet:有限字母的字典表,并规定了输出密文的范围,例如对于手机号码而言,是十进制纯数字格式的,其Alphabet包括字符'0'-'9'。对于MAC地址而言,是十六进制数字格式,其Alphabet应该包括大写英文字母的'A'-'E'和数字'0'-'9'在内的十六个字母。

注:此段引用自《大数据时代下的隐私保护(三)》

与掩码屏蔽比较

除了FPE,也可以通过掩码屏蔽方式完成数据脱敏工作,如手机号13912341234 -> 139****1234,不过这种脱敏并不可逆。

掩码屏蔽同样可以借助hutool完成:

// 139****1234
DesensitizedUtil.desensitized("13912341234", DesensitizedUtil.DesensitizedType.MOBILE_PHONE)

两种方式对比如下:

  • 掩码:不可逆,长度保持,字符不保持
  • FPE : 可逆, 长度保持,字符保持
优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/looly/blog/5254409

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。