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

桑坚
2023-12-01

下载地址:

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);解密调用

 类似资料: