JS实现BASE64加密解密-后台加密前台解密案例分析
JS实现BASE64加密解密-后台加密前台解密案例分析
通常的业务场景,我们并不会在前端进行加密解密的相关操作。原因很简单,前端没法让人放心,很容易被攻击。但是最近的
这个项目,由于无法在后台保存Session,导致用户信息的维护变的很复杂。从统一权限系统登录时,需要传递加密后的用户ID。
这个加密后的用户ID会作为URL的一部分,然后前端会从URL上直接截取这个加密后的用户ID。这样从前端传递到后台的用户ID,都是
这个加密后的用户ID。导致的结果就是每次请求都要在后台解密这个用户ID,工作量很大,且风险较大。经过细致的分析,我最后觉得
在前端进行解密,每次请求获取用户ID时,都调用这段公共的JS代码,这样后台代码就不用改动了。
后台BASE64加密,我们使用的API是:Decoder.BASE64Encoder,使用sun.misc.BASE64Decoder同理。通常我们是这样来加密的:
BASE64Encoder encoder = new BASE64Encoder(); userId = encoder.encode(userId.getBytes());
然后这样来解密:
BASE64Decoder decoder = new BASE64Decoder(); str = new String(decoder.decodeBuffer(str));
现在的业务场景是,我们在后台使用BASE64加密的字符串,需要在前台进行BASE64解密。我们需要先引入Base64.js这个包。然后调用
Base64.decode(str)就可以解密了。先来看看Base64.js
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(/rn/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 } };
就是上面这段代码,短短几十行代码,不是很复杂,有兴趣的朋友,可以研究一下。Base64.js对外提供了2个方法,一个是加密
方法encode(e),一个是解密方法decode(e)。OK,有了这个Base64.js,就可以满足现在的这个需求。这里记录一下,因为用的较少,
有时间可以回顾一下。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。