保形加密(FPE)

AI摘要
本文分享了格式保留加密(FPE)算法的实现资源,包括算法介绍链接和PHP、Java、Go三种语言的代码库。重点展示了Java示例代码,演示了如何使用FF3算法对数字ID进行加密与解密操作。

算法介绍:knowuv.com/blog/fpe_encryption
php实现:github.com/Ivinco/crypto-ff3-php
java实现:github.com/mysto/java-fpe
go实现:github.com/dusty-cjh/golang-fpe
示例代码:

package FF3;

import com.privacylogistics.FF3Cipher;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import java.io.IOException;

/**
 * <a href="https://github.com/mysto/java-fpe">Java 中的格式保护加密</a>
 */
public class FF3 {
    public static void main(String[] args) throws IOException, IllegalBlockSizeException, BadPaddingException {
        String key = "EF4359D8D580AA4F7F036D6F04FC6A94"; //FPE保形算法密钥,必须为随机(16|24|32)字节的hex大写字符串
        String tweak = "74656E616E745F31"; //FPE保形算法Tweak,必须为随机8字节的hex大写字符串
        FF3Cipher f3 = new FF3Cipher(key, tweak);
        System.out.println(encrypt(f3, 132) + " " + decrypt(f3, encrypt(f3, 132)));
        System.out.println(encrypt(f3, 13456941) + " " + decrypt(f3, encrypt(f3, 13456941)));
        System.out.println(encrypt(f3, 4294967295L) + " " + decrypt(f3, encrypt(f3, 4294967295L)));
    }

    public static long encrypt(FF3Cipher f3, long userId) throws IllegalBlockSizeException, BadPaddingException {
        String userIdStr = String.format("%06d", userId);
        return Long.parseLong(f3.encrypt(userIdStr));
    }

    public static long decrypt(FF3Cipher f3, long userId) throws IllegalBlockSizeException, BadPaddingException {
        String ret = f3.decrypt(String.valueOf(userId));
        return Long.parseLong(ret);
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
梦想星辰大海
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!