zoukankan      html  css  js  c++  java
  • 关于http传输base64加密串的问题


    问题场景:

    在使用luacurl进行http post请求的时候,post的内容是一串json串。json传里面的某个字段带上了base64加密的串。

    如post的内容如下: 

    xxxxxx{"xx"="JAJFKDJKF+=="}

    传输到对方后,对方接收到的报文里面的post的内容变成了:  

    xxxxxx{"xx"="JAJFKDJKF =="}

    远程和负责服务器端的小伙伴调了大半天,发现+号变成了空格!这是什么诡异情况?!


    查询相关资料,发现:

    1. base64编码里面有一个 “+” 号,在urlecode编码中 “+” 会被解码成空格,urlencode时,"+" 号肯定是由空格编码出来的,但是base64编码的结果中 "+" 不是空格编码出来的,如果将base64编码作为安全的url编码使用,则 “+” 将被解码成空格,这是我们不愿看到的; 所以不要base64编码作为url编码来使用.

    2. 我们知道http头里面可能会用base64编码来传输一些信息,因为这些信息不会被web服务器默认做url解码的,我们可以得到原始的编码信息,所以http头里面使用base64编码是可以接受的。
    用base64编码后再进行URL编码,再传输可能会避免此类问题。

    Base64编码将二进制数据按照每三个字节转换成四个字节可读字符,编码后的字符长度大约为136.1%。字符范围为 A-Z  a-z  0-9    +。但编码后的字符串不太适合使用URL传输,中文加密后的乱码也多是因为这个原因引起:放在url中传输时+号会被替换成空格;并且每76个字符都会添加一个换行" ",这个换行符合会丢失。


    在实际的测试过程中,确实发现+号被替换成空格了,但是, 换行符并未丢失!


    解决方案如下:

    接收方如果发现收到的json加密串中包含空格,将其替换为+号后,再进行Base64的解密工作.

  • 相关阅读:
    WPF自定义RoutedEvent事件代码段
    微信聊天和通讯录按钮样式
    【转】c#、wpf 字符串,color,brush之间的转换
    模块式开发
    通过属性进行浅拷贝
    【转】string.Format对C#字符串格式化
    酷学习笔记——前言
    C# 连蒙带骗不知所以然的搞定USB下位机读写
    C# Ioc、DI、Unity、TDD的一点想法和实践
    虹软人脸识别速度测试征集
  • 原文地址:https://www.cnblogs.com/jpfss/p/10038770.html
Copyright © 2011-2022 走看看