`

base64加密使用urlencode,再解码时出现乱码

阅读更多
base64加密使用urlencode出现的问题
 
最近用了base64加解密的问题,在使用的过程中出现了不少问题,上网查了一下 ,收获颇多,所以自己也总结了一下,以后再遇到这个问题,也好知道从哪里下手。
 
base64编码是网络传输的比较被青睐的一种编码,因为base64编码的字符集也是基本的asscii字符,所以经常会被当做安全的编码放在url里面传输,当做urlencode编码使用了,其实我们应该明白一下两点:
 
    1. base64编码里面有一个 “+” 号,在urlecode编码中 “+” 会被解码成空格,urlencode时,"+" 号肯定是由空格编码出来的,但是base64编码的结果中 "+" 不是空格编码出来的,如果将base64编码作为安全的url编码使用,则 “+” 将被解码成空格,这是我们不愿看到的; 所以不要base64编码作为url编码来使用.
 
 
    2. 我们知道http头里面可能会用base64编码来传输一些信息,因为这些信息不会被web服务器默认做url解码的,我们可以得到原始的编码信息,所以http头里面使用base64编码是可以接受的。
用base64编码后再进行URL编码,再传输可能会避免此类问题。
 
这个是从http://blog.greycode.cn/128.html 这里看到的,总结的挺好的,
 
还有http://phpor.net/blog/starred/1/2/  这里面的文章写得也不错,收藏了,呵呵
 
Base64编码将二进制数据按照每三个字节转换成四个字节可读字符,编码后的字符长度大约为136.1%。字符范围为 A-Z  a-z  0-9  \  +。但编码后的字符串不太适合使用URL传输,中文加密后的乱码也多是因为这个原因引起:放在url中传输时+号会被替换成空格;并且每76个字符都会添加一个换行"\n",这个换行符合会丢失。
 
例如:
哈哈哈哈哈哈。。。。
 
哈哈哈哈哈哈。。。。
 
哈哈哈哈哈哈。。。。
会被编码为:
uf65/rn+uf65/rn+oaOho6GjDQoNCrn+uf65/rn+uf65/qGjoaOhow0KDQq5/rn+uf65/rn+uf6h\no6GjoaM=
放在URL中传输时会变成
uf65/rn uf65/rn oaOho6GjDQoNCrn uf65/rn uf65/qGjoaOhow0KDQq5/rn uf65/rn uf6h
o6GjoaM=
 
 解析肯定会出问题。
 
所以在传输和解密时要做如下处理:
 
1.去掉\n
 
2.替换空格为+ 
 

获取到的请求数据

eyJqb3NfcGFyYW1ldGVycyI6eyJhcHBfa2V5IjoiNDUyNDJFMkU0QjA3RTNCODcyRDExNjM1MTUyRjY1MzIiLCJlbmRfZGF0ZSI6MTQ2OTgwODAwMDAwMCwiaXRlbV9jb2RlIjoiRldfR09PRFMtNDY4MTAtMSIsInVzZXJfbmFtZSI6IueIseWxi awj WumOaWueaXl iIsOW6lyIsInZlcnNpb25fbm8iOjF9fQ==

 

因为ulrencode 导致+号变为空格导致解析出来乱码

分享到:
评论

相关推荐

    java加密工具类 md5 aes base64 urlencode

    加密工具类 包含md5加密 base加密解密 md5加密 aes加密解密 urlencoude

    Android AES、MD5、Base64、URLEncode加密

    Android AES、MD5、Base64、URLEncode加密 org.apache.commons.codec.binary.Base64; 代替sun.misc.BASE64Encoder sun.misc.BASE64Encoder

    base64_encode and urlencode

    在阅读和理解`base64_encode.cpp`和`urlencode.cpp`的源代码时,你需要关注以下几个关键点: 1. 数据的输入与输出格式:了解源码如何处理二进制数据和字符串,以及如何生成和解析编码后的结果。 2. 编码规则:理解...

    Delphi【HMC-SHA签名、SHA加密、MD5加密、URL编码与解码、Base64编码与解码】

    SHA.exe、HMAC.exe、BASE64.exe、URL.exe、MD5.exe这些文件可能是使用Delphi编写的独立可执行程序,分别对应实现了SHA加密、HMAC-SHA签名、Base64编码与解码、URL编码与解码以及MD5加密的功能。

    c语言实现aes ecb模式加密,可以和java,c#,obj-c互相 加,解密。包含base64编码,urlEncode编码

    c语言实现aes ecb模式加密,可以和java,c#,obj-c互相 加,解密。包含base64编码,urlEncode编码 注意,该算法里面的密文是转换成16进制的字串,如果不要16进制,可自行转换,内的函数。 vc6,vs2008,可编译。

    base64编码解码用于pb8pb9pb12.5等

    Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。 关于这个编码的规则: ①把3个字符变成4...

    PHP base64编码后解码乱码的解决办法

    然而,当涉及到包含多字节字符(如汉字)的数据时,可能会遇到编码后解码出现乱码的问题。这个问题通常与字符集设置有关,而非base64_encode或base64_decode函数本身的错误。 在上述描述中,开发者创建了一个跳转并...

    Base64加解密 VS2015写的

    这段代码首先将字符串编码为字节数组,然后使用`Convert.ToBase64String()`进行编码,最后再用`Convert.FromBase64String()`解码回原始文本。运行这段代码,你会发现Base64编码后的字符串可以无损地解码回原始数据,...

    PHP+JS Base64和URI编码解码混合使用

    例如,当需要在URL中传递Base64编码的数据时,先使用Base64编码,然后对结果进行URI编码,确保其在URL中是安全的。在服务器端,PHP会先URI解码,然后再Base64解码。在浏览器端,JavaScript可能先进行Base64编码,...

    c#中 base64字符串与普通字符串互转

    1. 对于包含特殊字符的Base64字符串,如URL中的+和/,通常需要使用`WebUtility.UrlEncode`或`Uri.EscapeDataString`进行编码,解码时则用`WebUtility.UrlDecode`或`Uri.UnescapeDataString`。 2. 如果Base64字符串...

    js实现urlencode加密适用于ut8编码

    在网站开发过程中,使用汉字传输会导致有时URL会出现乱码的问题,可通过urlencode对中文进行编码,然后再解码,避免出现乱码,此函数加密的字符串可通过php的urldecode进行解码

    vuebase64fileupload利用Vuejs将上传文件作为base64datauris

    4. **状态管理**:将Base64数据绑定到Vue实例的属性上,利用Vue的响应式系统,当数据变化时,视图会自动更新。 5. **错误处理**:可能需要处理`error`事件,捕获文件读取过程中的任何异常。 在`vue-base64-file-...

    php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]

    Base64编码不是加密方式,它是一种编码格式,可以很容易地被解码回原始数据,因此它不提供任何安全性。但它的用途广泛,比如在需要将二进制数据嵌入到文本文件(如XML)时,或者是在HTTP头中传输数据时。例如,base...

    php MD5 base64 crypt等加密函数用法集.rar

    //Sha1这种加密方式跟MD5相差不是很大都有一个$raw_output的可选参数,使用方法也是一样的,$raw_output参数为true返回以20字符长度的格式,否则返回40字符长度的16进制的数字  $str=urlencode('陈和群'); //...

    PB字符串加密、解密函数

    在实际应用中,PB字符串加密和解密函数通常会结合使用,比如先使用非对称加密算法加密一个会话密钥,然后使用这个密钥执行对称加密来保护大量数据。这样的混合策略既保证了速度,又确保了安全性。 编写PB加密函数时...

    各种格式的编码解码工具类分享(hex解码 base64编码)

    此外,为了适应URL的特殊需求,`EncodeUtils`还提供了一个`base64UrlSafeEncode`方法,它使用Base64的URL安全变体,将可能出现的URL非法字符替换为其他字符,以符合RFC3548标准。 ```java public static String ...

    UrlEncode解码

    - Base64编码:虽然不是Url编码,但有时用于在URL中编码二进制数据,因为它只使用ASCII字符且没有特殊字符。 通过理解Url编码和解码,开发者可以更有效地处理包含特殊字符的URL,确保数据在互联网上传输的准确性。...

    js-base64 参数编码

    `js-base64`库提供了一个选项来使用URL安全的替代字符,比如`Base64.urlEncode()`和`Base64.urlDecode()`。 4. **数组缓冲区支持**:JavaScript的ArrayBuffer对象常用于处理二进制数据。`js-base64`库可以将...

    UrlEncodeDecode解码编码工具(双向)

    URL编码,也称为Percent-encoding,是URI(统一资源标识符)的一部分,用于在不安全或非ASCII字符出现在URL中时进行转换。这是因为URL格式中只允许使用ASCII字符集的部分字符。UrlEncode就是将URL中的特殊字符或非...

Global site tag (gtag.js) - Google Analytics