byte[]->new String(byte[]) -> getByte()引发的不一致问题
今天接短信接口,短信接口提供了sdk,我们可以直接用sdk发送请求然后发送对应短信。
但是想使用我们平台自定义的httpUtil实现。
然而忙了1天半,才解决这个问题,还是我同事帮忙找出问题并解决的。
步骤:
1、请求信息转json
2、json走AES加密得到byte[]
3、将byte[]放入post请求发送,并接受响应。
sdk直接成功,它是自己基于HttpURLConnection封装的一套HttpUtil,直接接受了byte[]作为请求参数,使用post发送响应成功
我们的HttpUtil是基于HttpClient封装而来,post方法只能接受String或Map参数,于是将加密后的byte[] 进行new String()操作后传入,跟进信息,底层将该String采用getByte("UTF-8")进行转换给Request然后请求。一直返回解密失败。
反复调试,将contentType指定为text/plain,编码统一都是UTF-8。但依旧一直该错误。对比两种方式加密后byte[],没有区别。最后发现使用new String(byte[])之后getByte()得到的byte[]容量变大,颠覆我的认知了,byte[]数组经过指定编码new String()然后经过指定编码getByte[]得到的居然不一致。后面定位原因是我系统默认的编码和指定的编码都是UTF-8,但是AES加密产生的byte[]的编码是ISO-8859-1,导致得到的byte[]不是原来的byte[],所以解密失败。


也就是说我前面解码byte[]得到字符串的时候使用了错误编码,导致后面getByte指定错误编码得到的字符串解密后不是原来的样子。
byte[]->new String(byte[]) -> getByte()引发的不一致问题的更多相关文章
- C# byte[]与char[]、string与char[]、byte[] 与 string 互转
1. byte array -> char array Byte[] b=new byte[5]{0x01,0x02,0x03,0x04,0x05}; Char[] c=Encoding.AS ...
- python unicode和string byte
python unicode 和string那 开发过程中总是会碰到string, unicode, ASCII, 中文字符等编码的问题, 每次碰到都要现搜, 很是浪费时间, 于是这次狠下心, 一定要 ...
- 用java String类的getBytes(String charsetName)和String(byte[] bytes, String charsetName)解决乱码问题
Java中String的数据是如何存储的,查看源代码就可以知道,String的数据是存储在char[] value这样一个成员变量中的,char类型的大小在java中是2个字节 我们还知道,现在普遍使 ...
- C# Byte[] 转String 无损转换
C# Byte[] 转String 无损转换 转载请注明出处 http://www.cnblogs.com/Huerye/ /// <summary> /// string 转成byte[ ...
- BufferHelp byte[] Stream string FileStream Image Bitmap
/******* * *** ***** ** ** * * * * * * * * ***** * * * * * * * * * * * * * * * ******* *** * ***** * ...
- [转]关于网络通信,byte[]和String的转换问题
最近的项目中要使用到把byte[]类型转换成String字符串然后通过网络发送,但发现发现出去的字符串和获取的字符串虽然是一样的,但当用String的getBytes()的方法得到的byte[]跟原来 ...
- java中String byte HexString的转换
原文:http://blog.sina.com.cn/s/blog_62e9ec530101ebv6.html HexString——>byte public static byte[] hex ...
- 如何在Byte[]和String之间进行转换
源自C#与.NET程序员面试宝典. 如何在Byte[]和String之间进行转换? 比特(b):比特只有0 1,1代表有脉冲,0代表无脉冲.它是计算机物理内存保存的最基本单元. 字节(B):8个比特, ...
- golang byte转string 字节数组转字符串的问题
golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上 ...
随机推荐
- GEO数据下载分析(SRA、SRR、GEM、SRX、SAMN、SRS、SRP、PRJNA全面解析)
很多时候我们需要从GEO(https://www.ncbi.nlm.nih.gov/geo/)下载RNA-seq数据,一个典型的下载页面是https://www.ncbi.nlm.nih.gov/ge ...
- Python自学:第二章 数字 整数
>>>2 + 3 5 >>>3 - 2 1 >>>3 * 2 6 >>>3 / 2 1.5
- kibana的 timelion工具
时序控件(Timelion)是一款时间序列数据可视化工具,它可以将多种独立的数据源合并呈现到一张视图上. .es函数 index 指明索引 .es(index=nginx-access-log- ...
- Fiddler抓包分析
在Fiddler的web session界面捕获到的HTTP请求如下图所示: 各字段的详细说明已经解释过,这里不再说明.需要注意的是#号列中的图标,每种图标代表不同的相应类型,具体的类型包括: ...
- php字符串的拆分截取
/* * strstr区分大小写 * stristr不区分大小写 * */ $str="test/abc.jpg"; echo stristr($str,'.'); echo '& ...
- mysql 时间戳转换 、cnd、dns 通俗理解
- FileZilla 客户端连接 FlieZilla 服务器 连接成功读取目录列表却失败的解决办法
解决过程: 第一步: 第二步:
- mysql处理以逗号隔开的字段内容
有一个字段保存了CheckBox内容,比如职业目标选择对于数据库字段otWorkgoal,保存了1,2,3,4内容 现在需要使用纯mysql语句,将字段otWorkgoal根据内容,进行翻译成中文的内 ...
- 新增节点NewBook并增加属性Name="WPF"
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlPath); var root = xmlDoc.DocumentElement;//取到 ...
- visual studio利用 indent guides 格式化代码 添加竖线
点击 Visual Studio 2013 工具—扩展和更新—联机 然后输入indent guides 自动搜索出来这个插件(如图).注:Visual Studio 2010需要自己在网上下载安装. ...