最近利用go语言对公司里的nodejs写的接口进行重写。遇到了不同语言之间对接数据的一些问题。
其中有几个问题浪费了我几天时间
nodejs
1.nodejs写接口再发送数据或者返回数据的时候底层默认会对数据进行base64加密然后使用url编码再进行传输,如果同用node接受的话感觉不出来什么不同,但是用golang接收数据的时候不得不对这些数据进行处理。url解码->字符串补全为4的倍数->再进行base64解码.
2.node里面crypto-js库对数据进行des-cbc加密的时候使用16位的key,实际上底层还是8位的key
3.node的pako库再对数据进行gzip进行压缩的时候用的是deflate算法,底层使用的是zlib压缩方法。他会先对数据进行unicode编码然后再进行压缩。go接收数据解码的时候需要对数据进行unicode解码以及使用zlib库进行解压。
//压缩
func DoZlibCompress(src []byte) []byte {
var in bytes.Buffer
w := zlib.NewWriter(&in)
w.Write(src)
w.Close()
return in.Bytes()
}
//解压
func DoZlibUnCompress(compressSrc []byte) []byte {
b := bytes.NewReader(compressSrc)
var out bytes.Buffer
r, _ := zlib.NewReader(b)
io.Copy(&out, r)
return out.Bytes()
}