javascript URL address 64-bit encryption and decryption compatible with various high and low versions of IE

Encryption and decryption is needed when passing front-end parameters, and it must be compatible with all high and low versions of IE. The default version is IE9 and IE9 and above. The browser actually comes with window.btoa encryption and window.atob decryption methods, and consider the low version of IE. Need to manually define the BASE64 encryption and decryption method , directly upload the code!



//针对IE8以及以下版本需要手动定义Base64加密解密方法
var Base64={
    
    _keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){
    
    var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){
    
    n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){
    
    u=a=64}else if(isNaN(i)){
    
    a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){
    
    var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){
    
    s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){
    
    t=t+String.fromCharCode(r)}if(a!=64){
    
    t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){
    
    e=e.replace(/\r\n/g,"n");var t="";for(var n=0;n<e.length;n++){
    
    var r=e.charCodeAt(n);if(r<128){
    
    t+=String.fromCharCode(r)}else if(r>127&&r<2048){
    
    t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{
    
    t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){
    
    var t="";var n=0;var r=c1=c2=0;while(n<e.length){
    
    r=e.charCodeAt(n);if(r<128){
    
    t+=String.fromCharCode(r);n++}else if(r>191&&r<224){
    
    c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{
    
    c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}

var target = 'http://121.42.104.101/fgd/add.html?depAccess=inDepId&departmentUpdate=1&jituanUpdate=0&updateDetailBtn=1&taskId=1677647&billId=f9aa7a74738f03e201738f57779f014c&token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..oXE1JMgJu2uA0LhcKOEfhQ.pzm9al4mgGAoQQ-G6HoifzgwcStmVcgmfvEH_9pJCycdMQeQUXv_gbgbhRc930ysZLK7R0vsgzgpQHgaj4EDG4Dy3WvOq91r7T5fXFkJeqglP9qwmwVb3oVdhzZ55nbd.8kikdaMssyg4EVAthDEcjw';
//加密
var enCodeStr2 = window.btoa?btoa(target):Base64.encode(target);
console.info(enCodeStr2);
//解密
var deCodeStr2 = window.atob?atob(enCodeStr2):Base64.decode(enCodeStr2);
console.info(deCodeStr2);

The above code is the code made by the senior front-end architect of the project team, which has strong compatibility and reference. Haha, although I am a back-end engineer and rarely involve front-end things, such good code must be sorted out and shared. Hope Can help everyone!

Guess you like

Origin blog.csdn.net/wujian_csdn_csdn/article/details/107632519