有很多应用场景,数据通常经过加密和编码后传输,有时我们需要知道经过处理后的数据的长度,此时就需要分析各种算法的数据处理策略,及结果变化。下边主要介绍国密SM2算法签名与加密结果字节长度变化及Hex与Base64编码长度变化。
前提:
1,ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
2,UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。
3,Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节。
数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
Hex16进制编码
1英文字符=1Byte=8bit
1中文字符=3Byte=24bit
16进制采用0-F来表示,4bit可以表达16进制的值(0000~1111)。
故采用16进制编码1个字符后,会变成2个16进制符,相当于是增加了2倍的数据量。
Base64编码
Base64 编码是基于64个字符 A-Z,a-z,0-9,+,/ 的编码方式,因为2的6次方正好为64,所以就用6bit就可以表示出64个字符。
3Byte=24bit,正好可以表达Base64中4个字符。所以长度大概是字节数组的1.3333倍。
字符长度是3的倍数的,则编码后的长度计算公式为:
i/3*4
不是3的倍数的,则编码后的长度计算公式为:
i/3*4+4
其中i表示原字符个数,i/3取整。
国密算法SM2签名
正常签名结果为64字节,但是由于签名后会做ASN.1编码,实际输出长度为70-72字节不等。
国密算法SM2加密
支持近128G字节数据长度,加密结果增加97个字节。
国密算法SM2加密+Base64编码后的数据增长量
按照每次加密增加97个字符计算,则最小的加密后长度为97或98,再将97带入Base64编码后的长度计算公式i/3*4+4=132,再按照132/97≈1.36,则原数据的最大增长量为1.36倍,后边随着原文长度增加,对应的增长量会变低。
版权归原作者 帅气的梧桐述 所有, 如有侵权,请联系我们删除。