AES算法以及前端使用实例

        AES算法:  我们通常是将一串明文通过AES加密成密文然后传递,接收方采用相同的方法解密进行使用,下面详细介绍使用方法、以及可能遇到的bug。

        密匙:随机的字符串都可,但要注意长度要求为4、8、12、16等幂次增长,否则解密困难。

一、加密解密涉及的参数说明:

  1.  key(密匙):自定义;
  2. 明    文          :要加密的值;
  3. IV                  :向量,偏移量;
  4. mode             :  加密模式五种,EBC(不支持IV)、CBC、CFB、OFB、CTR,前两者常                               用、后四种均支持IV;
  5. padding         :  填充方式三种,PKCS5,、PKCS7(如果使用PKCS5报错,用PKCS7就可                             以)、 NOPADDING
  6. 密文              :加密后的值;前端加密出来的就是base64格式的

二、结合react简单使用:

注:CryptoJS.enc.Utf8.parse  是用来从UTF8编码解析出原始字符串,以及配对的可以把字符串转成UTF8编码

转为加密需要的wordarray:let   wordarray = CryptoJS.enc.Utf8.parse("****")

转为字符串:let   utf8str       = CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Utf8.stringify(decrypt))

1、npm 安装:npm install crypto-js

2、引入:import CryptoJS from 'crypto-js'; 

3、使用
    //加密
    encrypt(word){
        var key = CryptoJS.enc.Utf8.parse("tion2077");//密钥与后端保持一致
        var srcs = CryptoJS.enc.Utf8.parse(word);
        var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});   
        //encrypted.toString()  就是base64格式的
        return encodeURIComponent(encrypted.toString()); // (encodeURIComponent可以不要,根据自己的需求来)
    }
    //解密
    decrypt(word){
        let decodeurl = decodeURIComponent(word)  //(对应上方的decodeURIComponent)
        var key = CryptoJS.enc.Utf8.parse("tion2077");
        var decrypt = CryptoJS.AES.decrypt(decodeurl, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
        return CryptoJS.enc.Utf8.stringify(decrypt).toString();
     }

     
    console.log('加密前:123');                   //加密前:123
    console.log('加密后:',this.encrypt(123));    //加密后:Qr1BDgw5JWOWySL8m4KTFQ%3D%3D
    console.log('解密后:',this.decrypt(this.encrypt(123)));  //解密后:123

三、相关拓展

1、加密后的数据直接转为字符串是Base64编码的:   eg.  encryteddata.toString()   
   这种解密的时候不需要btoa等base解码,如第二部分代码即可

2、转为java的密文应为(一般后端想要这种):
   let encoded_str =  encryteddata.ciphertext.toString()
   这时解密就要将其先转为base64格式
   第一步:let encryptedHexStr = CryptoJS.enc.Hex.parse(encoded_str)  //先转为16进制
   第二步:let encryptedBase64 = CryptoJS.enc.Base64.stringify(encryptedHexStr) //转为base64

3、代码编写
   //加密
   encrypt(word){
        var key = CryptoJS.enc.Utf8.parse("tion2077");//密钥与后端保持一致
        var srcs = CryptoJS.enc.Utf8.parse(word);
        var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});   
        //encrypted.toString()  就是base64格式的
        return encodeURIComponent(encrypted.ciphertext.toString()); // (encodeURIComponent可以不要,根据自己的需求来)
    }

    //解密
    decrypt(word){
        let decodeurl = decodeURIComponent(word)  //(对应上方的decodeURIComponent)
        let encryptedHexStr = CryptoJS.enc.Hex.parse(decodeurl) //WordArray.init格式
        //{sigBytes: 16,words: (4) [1119699214, 205071715, -1765203204, -1685941483]}
        let encryptedBase64 = CryptoJS.enc.Base64.stringify(encryptedHexStr) //Qr1BDgw5JWOWySL8m4KTFQ==
        var key = CryptoJS.enc.Utf8.parse("tion2077");
        var decrypt = CryptoJS.AES.decrypt(decodeurl, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
        return CryptoJS.enc.Utf8.stringify(decrypt).toString();
     }
    console.log('加密前:123');                  //加密前:123
    console.log('加密后:',this.encrypt(123));   //加密后:42bd410e0c39256396c922fc9b829315
    console.log('解密后:',this.decrypt(this.encrypt(123)));//解密后:123
        
    

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值