首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

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

FPE介绍 FPE(Format Preserving Encryption) 格式保留加密是一种格式保持与明文相同的加密方式,通常用于数据脱敏。 例如对于敏感的数据信息,如电话号码(13位数字),FPE算法算法加依旧是13位数字,因此这种特性可以不用变更数据库中字段格式,有利于传播。 除了这些优点,还具有: 数据长度不变。加密前长度是N,加密后长度仍然是N 数据类型不变,加密前是数字类型,加密后仍然是数字类型。 加密过程可逆,加密后的数据可以通过密钥解密还原原始数据。 注:此段引用自《大数据时代下的隐私保护(三)》 更详细的介绍见: https://blog.csdn.net/scuLVLV/article/details/71191773 https://anquan.baidu.com/article/193 算法实现 由于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 : 可逆, 长度保持,字符保持

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册