当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JS加密插件CryptoJS实现AES加密操作示例

JS加密插件CryptoJS实现AES加密操作示例

2018年09月26日  | 移动技术网IT编程  | 我要评论

本文实例讲述了js加密插件cryptojs实现aes加密操作。分享给大家供大家参考,具体如下:

最近在做一个项目,考虑到数据的安全性,我们要给数据在传输过程中加密,防止一些恶意的操作以及爬虫抓取数据。

  • 用到的库:cryptojs 官方地址https://code.google.com/archive/p/crypto-js/

首先看看这个cryptojs的目录结构

主要是两个文件夹,components和rollups

第一个是组件,第二个是汇总。

在汇总文件夹中的文件是在组件一个或多个文件夹拼接后压缩的。

这使得汇总独立的文件夹在你的项目纳入项目文件,而无需担心它的依赖。

你可以在这里查看汇总文件和组件之间的关系:

https://code.google.com/p/crypto-js/source/browse/tags/3.1.2/builder/build.yml

首先在项目中引入对应的加密文件,我们用的是aes,同时用requirejs来加载js,在配置中声明路径:

require.config({
  baseurl: "/public/home/js/lib",
  paths: {
    hzbaes:'../module/hzb.aes'
  }
});

首先把加密解密封装好为一个模块

//模块初始化
var init=function () {
    key = cryptojs.enc.utf8.parse(cryptojs.md5(ym.hezubao).tostring());
    iv = cryptojs.enc.utf8.parse(cryptojs.md5(key).tostring().substr(0,16));
}
function encrypt(data) {
    var encrypted='';
    if(typeof(data)=='string')
    {
      encrypted = cryptojs.aes.encrypt(data,key,{
        iv : iv,
        mode : cryptojs.mode.cbc,
        padding : cryptojs.pad.zeropadding
      });
    }else if(typeof(data)=='object'){
      data = json.stringify(data);
      encrypted = cryptojs.aes.encrypt(data,key,{
        iv : iv,
        mode : cryptojs.mode.cbc,
        padding : cryptojs.pad.zeropadding
      })
    }
    return encrypted.tostring();
}
/*aes解密
* param : message 密文
* return : decrypted string 明文
*/
function decrypt(message) {
    decrypted='';
    decrypted=cryptojs.aes.decrypt(message,key,{
      iv : iv,
      mode : cryptojs.mode.cbc,
      padding : cryptojs.pad.zeropadding
    });
    return decrypted.tostring(cryptojs.enc.utf8);
}

解释一下代码:

  • 我们加密的模式选的是cbc的,然后填充模式是填充0,这个是前后台约定的,请谨慎。加密秘钥要求是32位长字符串(通过md5加密确保32位,算法限制),iv初始化向量是16位长度的字符串。这两个东西不懂的话,看看aes加密的条件。
  • 要注意的是,在加密完成后的字符串是经过base64加密的,也就是说,后台解密模块必须要求考虑字符编码问题,这个由项目实际来决定。可以把他先转出utf8的然后再传递给后台。我这里后台是介绍base64加密后的,所以就不用转码了。
  • 解密之后要转成utf8喔,如果后台给的数据是json的话,要用json.parse()一下才能用。

在代码中调用

require(['hzbaes'], function(hzbaes){
  var jsondata={'id':2,'username':'春天的熊'};//json格式数据(加密支持json格式和字符串格式)
  $('#btn_test').click(function () {
    var encrypt=hzbaes.encrypt(jsondata);
      console.log('前台发过去的数据:'+encrypt);//已加密
    $.getjson(urlgenerator.url(2,'home','index','test'),{'data':encrypt},function (data) {
      if(!data['error'])
      {
        var decrypt=json.parse(hzbaes.decrypt(data['data']));
        console.log('后台发过来的数据:');//已解密
        console.log(decrypt);
      }else{
        console.log(data['error']);
      }
    })
  });
});

ps:关于加密解密感兴趣的朋友还可以参考本站在线工具:

在线aes加密/解密工具:

文字在线加密解密工具(包含aes、des、rc4等):

在线编码转换工具(utf-8/utf-32/punycode/base64):

base64编码解码工具:

在线md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:

在线sha1/sha224/sha256/sha384/sha512加密工具:

更多关于javascript相关内容可查看本站专题:《javascript加密解密技巧汇总》、《javascript查找算法技巧总结》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结

希望本文所述对大家javascript程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网