当前位置:Gxlcms > PHP教程 > javascript-服务端php的base64_encode加密后推到前端js解密后中文乱码

javascript-服务端php的base64_encode加密后推到前端js解密后中文乱码

时间:2021-07-01 10:21:17 帮助过:26人阅读

今天看了一段代码,实现的功能如下:

  1. 服务端php调用底层命令,将返回结果用base64_encode加密
  2. 前端js通过GET方法调用上述php获取经过加密的文本用下面的解密函数解密,英文没问题,但是中文乱码。
  1. <code> decode_base64_str:function (s) {
  2. var e={},i,k,v=[],r='',w=String.fromCharCode;
  3. var n=[[65,91],[97,123],[48,58],[43,44],[47,48]];
  4. for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}} for(i="0;i<64;i++){e[v[i]]=i;}" var="" b="0,c,x,l=0,o=s.substring(i,i+72);" for(x="0;x<o.length;x++){" c="e[o.charAt(x)];b=(b<<6)+c;l+=6;" while(l="">=8){r+=w((b>>>(l-=8))%256);}
  5. }
  6. }
  7. return r;
  8. },
  9. </n[z][1];i++){v.push(w(i));}}></code>

问题:

  1. 如果不经过这个加密解密过程中文显示没问题,但是是不是会有什么风险?
  2. 要完美实现解密中文,上述解密函数那个地方不对?

修正一下,js与php之间通过GET传递,直接传递的是encode后的字符串

PS:关于是否有必要用base64_encode我也不确定,我说的风险不是传递内容的泄露,而是是否存在诸如注入之类的风险,目前我知道的注入应该是前端提交给后端的时候发生,其他的不是很熟。

回复内容:

今天看了一段代码,实现的功能如下:

  1. 服务端php调用底层命令,将返回结果用base64_encode加密
  2. 前端js通过GET方法调用上述php获取经过加密的文本用下面的解密函数解密,英文没问题,但是中文乱码。
  1. <code> decode_base64_str:function (s) {
  2. var e={},i,k,v=[],r='',w=String.fromCharCode;
  3. var n=[[65,91],[97,123],[48,58],[43,44],[47,48]];
  4. for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}} for(i="0;i<64;i++){e[v[i]]=i;}" var="" b="0,c,x,l=0,o=s.substring(i,i+72);" for(x="0;x<o.length;x++){" c="e[o.charAt(x)];b=(b<<6)+c;l+=6;" while(l="">=8){r+=w((b>>>(l-=8))%256);}
  5. }
  6. }
  7. return r;
  8. },
  9. </n[z][1];i++){v.push(w(i));}}></code>

问题:

  1. 如果不经过这个加密解密过程中文显示没问题,但是是不是会有什么风险?
  2. 要完美实现解密中文,上述解密函数那个地方不对?

修正一下,js与php之间通过GET传递,直接传递的是encode后的字符串

PS:关于是否有必要用base64_encode我也不确定,我说的风险不是传递内容的泄露,而是是否存在诸如注入之类的风险,目前我知道的注入应该是前端提交给后端的时候发生,其他的不是很熟。

  1. <code>php</code><code>$base = base64_encode(urlencode('中文'));//JUU0JUI4JUFEJUU2JTk2JTg3
  2. console.log(decodeURIComponent(decode_base64_str('JUU0JUI4JUFEJUU2JTk2JTg3')));//中文
  3. </code>

人气教程排行