package com.dji.sample.common.util;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.DES;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;

import java.nio.charset.StandardCharsets;

/**
 * @description：对称加密
 */
public class DesUtil {


    private static DES getDes(String salt) {
        String key = genKey(salt);
        return SecureUtil.des(SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(), key.getBytes()).getEncoded());
    }

    /**
     * 获取加密后信息
     *
     * @param plainText 明文
     * @return 加密后信息
     */
    public static String getEncryptData(String plainText,String salt) {

        return getDes(salt).encryptHex(plainText); // 加密为16进制
    }

    /**
     * 获取解密后信息
     *
     * @param cipherText 密文
     * @return 解密后信息
     */
    public static String getDecryptData(String cipherText,String salt) {
        return getDes(salt).decryptStr(cipherText);
    }

    /**
     * 生成密钥，并转为字符串，可以储存起来，解密时可直接使用
     *
     * @return 密钥
     */
    public static String getSecretKey() {
        byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded(); // 随机生成秘钥
        return Base64.encode(key);
    }

    public static String genKey(String salt) {
        System.out.println(salt);
        String key = "b1uruk98vuk40cdego6jw5yv9tygjm3s";//CustomConfiguration.key;
        byte[] sKey = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue(),(salt + key).getBytes(StandardCharsets.UTF_8)).getEncoded();
        return Base64.encode(sKey);
    }

    public static String genSalt() {
        return RandomUtil.randomString(2);
    }

    public static void main(String[] args) {
        String salt = genSalt();
        System.out.println(salt);
        String encodeData = DesUtil.getEncryptData("Zyuas@202406",salt);
        System.out.println(encodeData);
//        encodeData = DesUtil.getEncryptData("WosIsAC58v",salt);
//        System.out.println(encodeData);
//        encodeData = DesUtil.getEncryptData("pilot123",salt);
//        System.out.println(encodeData);

        encodeData = getEncryptData("123456",salt);
        System.out.println(encodeData);
//        encodeData = getEncryptData("test123456");
//        System.out.println(encodeData);
//        encodeData = getEncryptData("test12345678");
//        System.out.println(encodeData);
        String decodeData = getDecryptData(encodeData,salt);
        System.out.println(decodeData);
//        System.out.println(UUID.randomUUID().toString());
//        System.out.println(UUID.randomUUID().toString());

    }
}