为什么加密后的数据往往都是base64输出而不是hex16进制输出

通常加密后的数据都是字节数组,比如流行的aes128对称加密,还有Rsa非对称加密,加密后得到了一个字节数组,这个字节数组存在内存中,往往我们需要输出得到我们人眼能看到的字符。

加密aes(xxx) = 3个字节的数组

3Byte = 24bit

当然你可以把一个Byte根据ansill码 直接转换成字符,但是有些字符是不可见的,还有一些特殊符号,所以把Byte直接依据anscill码来转换不现实。

若把3Byte 按 base64码表来转换 会得出 4个字符,因为 3*8 = 4* 6 .

若把3Byte直接按16进制来转换成字符的话 会得出 3*2 = 6个字符,可见把加密后是数据转成16进制来输出的话字符数会更多,变得更长,所以不好。

1个字节 = 2个16进制字符,4个bit一组

而base64 是6个bit一组,所以转换后的字符数会更短。

故加密后是字节数组往往以base64码表来输出。

太累了 头疼,写的可能比较乱,以后在整理

 

上一篇:PTA - 1016 部分A+B (15分)


下一篇:解决Flutter跟前端Vue交互和上传base64字符串到websocket无法生成图片的问题