crypto-js : 加密与解密

     function encrypt(param) {
        // method: 'AES', 'DES'
        // mode: 'CBC', 'ECB'
        const {key, text, method, mode} = param;
        const keyHex = CryptoJS.enc.Utf8.parse(key);
        if (!CryptoJS[method]) {
          throw new Error(`method(${method}) not found.`)
        }
        if (mode === 'ECB') {
          return CryptoJS[method].encrypt(text, keyHex, {
              mode: CryptoJS.mode.ECB,
              padding: CryptoJS.pad.Pkcs7,
            }).toString();
        } else if (mode === 'CBC') {
          return CryptoJS[method].encrypt(text, keyHex, {
              iv: keyHex,
              mode: CryptoJS.mode.CBC,
              padding: CryptoJS.pad.Pkcs7,
            }).ciphertext.toString();
        }
      }

      function decrypt(param) {
        const {text, key, mode, method} = param;
        const parseKey = CryptoJS.enc.Utf8.parse(key);
        if (!CryptoJS[method]) {
          throw new Error(`method(${method}) not found.`);
        }
        if (mode === 'CBC') {
          // 
          return CryptoJS[method].decrypt(text, parseKey, {
            iv: parseKey,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
          }).toString(CryptoJS.enc.Utf8);
        } else if(mode === 'ECB') {
          // 
          return CryptoJS[method].decrypt({
            ciphertext: CryptoJS.enc.Hex.parse(text)
          }, parseKey, {
            mode: CryptoJS.mode.ECB,
            padding: CryptoJS.pad.Pkcs7
          }).toString(CryptoJS.enc.Utf8);
        }
      }

      // 测试
      const res = encrypt({
        text: '123456',
        key: 'sdgjl',
        method: 'DES',
        mode: 'ECB'
      });
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值