加密方法汇总MD5.js,base64.js,aes.js,sha1.js

来源:互联网 发布:java定义一个构造方法 编辑:程序博客网 时间:2024/04/29 11:04

下载地址:

https://github.com/emn178/js-sha1

https://github.com/beatgammit/base64-js

https://github.com/emn178/js-md5

https://github.com/ricmoo/aes-js

https://github.com/brix/crypto-js


1、base64加密

  在页面中引入base64.js文件,调用方法为:

≮!DOCTYPE HTML≯
≮html≯
≮head≯
≮meta charset="utf-8"≯
≮title≯base64加密≮/title≯
≮script type="text/javascript" src="base64.js"≯≮/script≯
≮script type="text/javascript"≯ 
        var b = new Base64(); 
        var str = b.encode("admin:admin"); 
        alert("base64 encode:" + str); 
     //解密
        str = b.decode(str); 
        alert("base64 decode:" + str); 
≮/script≯ 
≮/head≯

≮body≯
≮/body≯
≮/html≯

 

2、md5加密

  在页面中引用md5.js文件,调用方法为


≮!DOCTYPE HTML≯
≮html≯
≮head≯
≮meta charset="utf-8"≯
≮title≯md5加密≮/title≯
≮script type="text/ecmascript" src="md5.js"≯≮/script≯
≮script type="text/javascript"≯ 
  var hash = hex_md5("123dafd");
    alert(hash)
≮/script≯ 
≮/head≯

≮body≯
≮/body≯
≮/html≯

 

3、sha1加密

  据说这是最安全的加密

  页面中引入sha1.js,调用方法为


≮!DOCTYPE HTML≯
≮html≯
≮head≯
≮meta charset="utf-8"≯
≮title≯sha1加密≮/title≯
≮script type="text/ecmascript" src="sha1.js"≯≮/script≯
≮script type="text/javascript"≯
  var sha = hex_sha1('mima123465')
    alert(sha)  
≮/script≯ 
≮/head≯

≮body≯
≮/body≯
≮/html≯

CryptoJS实现AES加密

首先在项目中引入对应的加密文件,我们用的是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']);            }        })    });});
将加密方法统一封装
sec= {   cfg: {      iv: CryptoJS.enc.Hex.parse('0000000000000000'),//填充模式0,iv初始化向量是16位长度的字符串,前后端商量约定      mode: CryptoJS.mode.CBC,//加密模式      padding: CryptoJS.pad.Pkcs7   },   encrypt: function (str, key) {      var k = CryptoJS.enc.Utf8.parse(key);      return CryptoJS.AES.encrypt(str, k, this.cfg).toString();   },   decrypt: function (str, key) {      var k = CryptoJS.enc.Utf8.parse(key);      return CryptoJS.enc.Utf8.stringify(CryptoJS.AES.decrypt(str, k, this.cfg));   },   md5: function (str) {      return CryptoJS.MD5(str).toString().toUpperCase();   },   genVldCode: function (str, key) {      return this.encrypt(this.md5(str + key), key)   }};

调用:

 var str = sec.decrypt(str, key);解密调用