您的位置:  首頁 > 技術 > java語言 > 正文

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

2021-09-10 10:00 https://my.oschina.net/looly/blog/5254409 looly 次閱讀 條評論

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 : 可逆, 長度保持,字符保持
  • 0
    感動
  • 0
    路過
  • 0
    高興
  • 0
    難過
  • 0
    搞笑
  • 0
    無聊
  • 0
    憤怒
  • 0
    同情
熱度排行
友情鏈接
18禁高潮出水呻吟娇喘mp3,日本熟妇乱人伦A片免费高清,成人午夜精品无码区,狠狠色噜噜色狠狠狠综合久久,麻豆一区二区99久久久久,年轻的妈妈4,少妇被又大又粗又爽毛片,护士张开腿让我爽了一夜,男男互攻互受h啪肉np文,你好神枪手电视剧免费观看啊,97人妻一区二区精品免费,久久久婷婷五月亚洲97号色,freegaysexvideos男男中国,国产精品国产三级国av麻豆,国产精品又黄又爽又色无遮挡网站,亚洲av无码一区二区三区网站,亚洲国产精品久久久久蜜桃,国产真人无码作爱视频免费,国产成人精品亚洲一区二区三区,亚洲欧洲日产最新,老司机带带我精彩免费,国产成人久久精品激情,日本最新av免费一区二区三区,边摸边吃奶又黄又激烈视频
<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>