Class FPE

java.lang.Object
org.miaixz.bus.crypto.center.FPE
All Implemented Interfaces:
Serializable

public class FPE extends Object implements 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 Classes
    Modifier and Type
    Class
    Description
    static enum 
    FPE模式 FPE包括两种模式:FF1和FF3(FF2弃用),核心均为Feistel网络结构。
  • Constructor Summary

    Constructors
    Constructor
    Description
    FPE(FPE.FPEMode mode, byte[] key, org.bouncycastle.crypto.AlphabetMapper mapper)
    构造,使用空的Tweak
    FPE(FPE.FPEMode mode, byte[] key, org.bouncycastle.crypto.AlphabetMapper mapper, byte[] tweak)
    构造
  • Method Summary

    Modifier and Type
    Method
    Description
    char[]
    decrypt(char[] data)
    加密
    解密
    char[]
    encrypt(char[] data)
    加密
    加密

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • FPE

      public FPE(FPE.FPEMode mode, byte[] key, org.bouncycastle.crypto.AlphabetMapper mapper)
      构造,使用空的Tweak
      Parameters:
      mode - FPE模式枚举,可选FF1或FF3-1
      key - 密钥,null表示随机密钥,长度必须是16bit、24bit或32bit
      mapper - Alphabet字典映射,被加密的字符范围和这个映射必须一致,例如手机号、银行卡号等字段可以采用数字字母字典表
    • FPE

      public FPE(FPE.FPEMode mode, byte[] key, org.bouncycastle.crypto.AlphabetMapper mapper, byte[] tweak)
      构造
      Parameters:
      mode - FPE模式枚举,可选FF1或FF3-1
      key - 密钥,null表示随机密钥,长度必须是16bit、24bit或32bit
      mapper - Alphabet字典映射,被加密的字符范围和这个映射必须一致,例如手机号、银行卡号等字段可以采用数字字母字典表
      tweak - Tweak是为了解决因局部加密而导致结果冲突问题,通常情况下将数据的不可变部分作为Tweak,null使用默认长度全是0的bytes
  • Method Details

    • encrypt

      public String encrypt(String data)
      加密
      Parameters:
      data - 数据,数据必须在构造传入的AlphabetMapper中定义的范围
      Returns:
      密文结果
    • encrypt

      public char[] encrypt(char[] data)
      加密
      Parameters:
      data - 数据,数据必须在构造传入的AlphabetMapper中定义的范围
      Returns:
      密文结果
    • decrypt

      public String decrypt(String data)
      解密
      Parameters:
      data - 密文数据,数据必须在构造传入的AlphabetMapper中定义的范围
      Returns:
      明文结果
    • decrypt

      public char[] decrypt(char[] data)
      加密
      Parameters:
      data - 密文数据,数据必须在构造传入的AlphabetMapper中定义的范围
      Returns:
      明文结果