根据序列号加密生产4*4的密码,如:X9PL-TERY-NOZN-GMF1

import org.apache.commons.codec.binary.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

/**
 * 根据序列号加密生产4*4的密码
 */

public class EncryptionAndDecryption {
    // 私钥
    private static String salt = "1234123412341234";

    /**
     * 加密
     *
     * @param encryptMessage 需要加密的信息
     * @return
     * @throws Exception
     */
    public static String encrypt(String encryptMessage) throws Exception {
        // 两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DES
        SecretKeySpec key = new SecretKeySpec(salt.getBytes(), "AES");
        // 实例化加密类,参数为加密方式,要写全
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        // 初始化加密
        cipher.init(Cipher.ENCRYPT_MODE, key);
        // 加密操作,返回加密后的字节数组
        byte[] bytes = cipher.doFinal(encryptMessage.getBytes());
        String tempResult = Base64.encodeBase64String(bytes);
        // 正则取出字母数字
        String result = tempResult.replaceAll("[^(a-zA-Z0-9)]", "");
        StringBuilder sql = new StringBuilder("");
        // 每4位拼接一次
        for (int i = 0; i < 16; i = i + 4) {
            sql.append(result.substring(i, i + 4).toUpperCase());
            sql.append("-");
        }
        String substring = sql.substring(0, sql.length() - 1);
        return substring;
    }

    // 测试
    public static void main(String[] args) throws Exception {
        String serialNumber = "123456789";
        String encrypt = encrypt(serialNumber);
        System.out.println("加密后信息encrypt:" + encrypt);
    }
}

 

上一篇:2021-11-11


下一篇:3 -【 API 开放平台安全设计 】- 3 接口安全加密传输