Javascript实现AES对称加密解密(ECB/CBC)

参考原文:

Javascript实现AES加密解密(ECB/CBC)_普通网友的博客-CSDN博客_js aes加密

哈喽,大家好啊

最近要做一个功能,由于安全,实现安全加密

所以就和后端商量考虑好,做AES加密

就商量一个密钥进行加密解密

1.这里是AES的CBC加密解密

    /**
     * AES 的CBC编码解密data数据
     */
    getDecodeDESpass() {
      // 这里是密钥
      var keyHex = CryptoJS.enc.Utf8.parse('hello');
      // 这里是demo样本 一些是json,
      var plaintText = "{'a':'SSS'}";
      // 一些是string
      var plaintText = 'aaa';

        //用CBC进行加密
       var encryptedData = CryptoJS.AES.encrypt(
           JSON.stringify(plaintText),
            plaintText,
            keyHex, {
               iv: CryptoJS.enc.Utf8.parse('0000000000000000‘),
               mode: CryptoJS.mode.CBC,
               padding: CryptoJS.pad.Pkcs7
         });
          // 打印出加密后的
          console.log(encryptedData.toString(),'加密后');
          // 再进行一些加工加密
          encryptedData = encryptedData.ciphertext.toString();
          // 转出Hex的
          var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);
          console.log('解密前hex:' + encryptedHexStr);
           // 转成Base64
          var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
          console.log('解密前Base64:'+ encryptedBase64Str);
         // 接下来就是解密了,讲最后Base64形式的进行解密
          var decryptedData = CryptoJS.AES.decrypt(
              encryptedBase64Str,
              keyHex, {
                iv: CryptoJS.enc.Utf8.parse('0000000000000000'),
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
          });
       console.log(JSON.parse(decryptedData.toString(CryptoJS.enc.Utf8)),'解密后')
    }
  }
  1. AES的ECB加密解密

/**
     * AES 的CBC编码解密data数据
     */
    getDecodeDESpass() {
      // 这里是密钥
      var keyHex = CryptoJS.enc.Utf8.parse('hello');
      // 这里是demo样本 一些是json,
      var plaintText = "{'a':'SSS'}";
      // 一些是string
      var plaintText = 'aaa';

        //用CBC进行加密
       var encryptedData = CryptoJS.AES.encrypt(
           JSON.stringify(plaintText),
            plaintText,
            keyHex, {
               iv: CryptoJS.enc.Utf8.parse('0000000000000000‘),
               mode: CryptoJS.mode.ECB,
               padding: CryptoJS.pad.Pkcs7
         });
          // 打印出加密后的
          console.log(encryptedData.toString(),'加密后');
          // 再进行一些加工加密
          encryptedData = encryptedData.ciphertext.toString();
          // 转出Hex的
          var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);
          console.log('解密前hex:' + encryptedHexStr);
           // 转成Base64
          var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
          console.log('解密前Base64:'+ encryptedBase64Str);
         // 接下来就是解密了,讲最后Base64形式的进行解密
          var decryptedData = CryptoJS.AES.decrypt(
              encryptedBase64Str,
              keyHex, {
                iv: CryptoJS.enc.Utf8.parse('0000000000000000'),
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
          });
       console.log(JSON.parse(decryptedData.toString(CryptoJS.enc.Utf8)),'解密后')
    }
  }

原文文章:

Javascript实现AES加密解密(ECB/CBC)_普通网友的博客-CSDN博客_js aes加密

这些我都进行验证并调试好啦,感谢原博主。

大家记得看了收藏点赞额,记录不容易。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,关于您的问题,我可以为您提供以下答案: 在PHP 7.2及以上版本中,可以通过openssl扩展实现AES加密。具体实现方式如下: 1. AES加密 ```php function aesEncrypt($data, $key, $iv) { $encrypted = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); return base64_encode($encrypted); } ``` 其中,$data为待加密的数据,$key为加密密钥,$iv为初始化向量,函数返回值为加密后的数据(base64编码)。 2. AES解密 ```php function aesDecrypt($data, $key, $iv) { $encrypted = base64_decode($data); $decrypted = openssl_decrypt($encrypted, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); return $decrypted; } ``` 其中,$data为待解密的数据(base64编码),$key为解密密钥,$iv为初始化向量,函数返回值为解密后的数据。 通过以上函数实现AES加密可以与JS进行互通,具体实现方式可以参考以下示例: 1. JS加密 ```javascript function aesEncrypt(data, key, iv) { var cipher = crypto.createCipheriv('aes-128-cbc', key, iv); var encrypted = cipher.update(data, 'utf8', 'base64'); encrypted += cipher.final('base64'); return encrypted; } ``` 其中,data为待加密的字符串,key为加密密钥,iv为初始化向量,函数返回值为加密后的数据(base64编码)。 2. JS解密 ```javascript function aesDecrypt(data, key, iv) { var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv); var decrypted = decipher.update(data, 'base64', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; } ``` 其中,data为待解密的数据(base64编码),key为解密密钥,iv为初始化向量,函数返回值为解密后的数据。 注意事项: 1. 在PHP中,$key和$iv必须为16位长度的字符串,可以通过以下方式生成: ```php $key = openssl_random_pseudo_bytes(16); $iv = openssl_random_pseudo_bytes(16); ``` 2. 在JS中,key和iv必须为Buffer类型,可以通过以下方式生成: ```javascript var key = crypto.randomBytes(16); var iv = crypto.randomBytes(16); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值