Package org.miaixz.bus.crypto.center
Class FPE
java.lang.Object
org.miaixz.bus.crypto.center.FPE
- All Implemented Interfaces:
Serializable
FPE(Format Preserving Encryption)实现,支持FF1和FF3-1模式。
相关介绍见:https://anquan.baidu.com/article/193
FPE是一种格式保持与明文相同的加密方式,通常用于数据脱敏中,因为它需要保持明密文的格式相同, 例如社保号经过加密之后并不是固定长度的杂文,而是相同格式、打乱的号码,依然是社保号的格式。
FPE算法可以保证:
- 数据长度不变。加密前长度是N,加密后长度仍然是N
- 数据类型不变,加密前是数字类型,加密后仍然是数字类型
- 加密过程可逆,加密后的数据可以通过密钥解密还原原始数据
此类基于BouncyCastle实现
- Since:
- Java 17+
- Author:
- Kimi Liu
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumFPE模式 FPE包括两种模式:FF1和FF3(FF2弃用),核心均为Feistel网络结构。 -
Constructor Summary
ConstructorsConstructorDescriptionFPE(FPE.FPEMode mode, byte[] key, org.bouncycastle.crypto.AlphabetMapper mapper) 构造,使用空的TweakFPE(FPE.FPEMode mode, byte[] key, org.bouncycastle.crypto.AlphabetMapper mapper, byte[] tweak) 构造 -
Method Summary
-
Constructor Details
-
FPE
构造,使用空的Tweak- Parameters:
mode- FPE模式枚举,可选FF1或FF3-1key- 密钥,null表示随机密钥,长度必须是16bit、24bit或32bitmapper- Alphabet字典映射,被加密的字符范围和这个映射必须一致,例如手机号、银行卡号等字段可以采用数字字母字典表
-
FPE
public FPE(FPE.FPEMode mode, byte[] key, org.bouncycastle.crypto.AlphabetMapper mapper, byte[] tweak) 构造- Parameters:
mode- FPE模式枚举,可选FF1或FF3-1key- 密钥,null表示随机密钥,长度必须是16bit、24bit或32bitmapper- Alphabet字典映射,被加密的字符范围和这个映射必须一致,例如手机号、银行卡号等字段可以采用数字字母字典表tweak- Tweak是为了解决因局部加密而导致结果冲突问题,通常情况下将数据的不可变部分作为Tweak,null使用默认长度全是0的bytes
-
-
Method Details
-
encrypt
加密- Parameters:
data- 数据,数据必须在构造传入的AlphabetMapper中定义的范围- Returns:
- 密文结果
-
encrypt
public char[] encrypt(char[] data) 加密- Parameters:
data- 数据,数据必须在构造传入的AlphabetMapper中定义的范围- Returns:
- 密文结果
-
decrypt
解密- Parameters:
data- 密文数据,数据必须在构造传入的AlphabetMapper中定义的范围- Returns:
- 明文结果
-
decrypt
public char[] decrypt(char[] data) 加密- Parameters:
data- 密文数据,数据必须在构造传入的AlphabetMapper中定义的范围- Returns:
- 明文结果
-