import CryptoJS from "crypto-js";

/**
 * DES加密
 * @param {*} str 待加密字符串
 * @param {*} key 密匙
 * @returns 返回秘文
 */
function EDES(str, key) {
  var keyHex = CryptoJS.enc.Utf8.parse(key);
  var encrypted = CryptoJS.DES.encrypt(str, keyHex, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  return encrypted.ciphertext.toString();
}

/**
 * DES解密
 * @param {*} ciphertext 待解密字符串
 * @param {*} key 密匙
 * @returns 返回原数据
 */
function DDES(ciphertext, key) {
  var keyHex = CryptoJS.enc.Utf8.parse(key);
  var decrypted = CryptoJS.DES.decrypt(
    {
      ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
    },
    keyHex,
    {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    }
  );
  return decrypted.toString(CryptoJS.enc.Utf8);
}

const key = CryptoJS.enc.Utf8.parse("2234123412ABCDEF"); //十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse("BBCDEF1234123412"); //十六位十六进制数作为密钥偏移量

/**
 * AES加密
 * @param {*} data 待加密数据
 * @param {*} key 密匙
 * @param {*} iv 十六位十六进制数作为密钥偏移量
 * @returns 返回秘文
 */
function EAES(str) {
  const encrypted = CryptoJS.AES.encrypt(str, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  }); //base64格式的密文
  return encrypted.toString();
}

/**
 * AES解密
 * @param {*} encrypted 待解密数据
 * @param {*} key 密匙
 * @param {*} iv 十六位十六进制数作为密钥偏移量
 * @returns 返回原数据
 */
function DAES(encrypted) {
  const decrypted = CryptoJS.AES.decrypt(encrypted, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });
  return decrypted.toString(CryptoJS.enc.Utf8);
}

// import crypto from "service/encrypt"
export default {
  EDES,
  DDES,
  EAES,
  DAES
};
