JuneAndGreen / sm-crypto

国密算法js版
MIT License
894 stars 245 forks source link

sm4.encrypt的key要求是128比特,可是demo那里的字符是32位。 #104

Closed YaroED closed 6 months ago

YaroED commented 6 months ago

sm4.encrypt的key要求是128比特,可是demo那里的字符是32位。

JuneAndGreen commented 6 months ago

128 / 8 = 16(字节)

16 进制串中,0xff = 11111111 = 8位 = 1字节 = 字符串长度2

YaroED commented 6 months ago

后端的包是传16位,我传16位的utf8串,加密会报错。这个是一定要32位的16进制串吗?

YaroED commented 6 months ago

@JuneAndGreen

changhr2013 commented 6 months ago

密钥一般是随机的比特序列,一般随机性比较好的密钥,用字符串是无法表示的,所以一般密钥都会使用 16 进制编码进行表示。 你后端传的 16 位字符串,那你将 16 位字符串做 Hex 编码后变成 32 位的 16 进制字符串传入即可。

JuneAndGreen commented 6 months ago

后端的包是传16位,我传16位的utf8串,加密会报错。这个是一定要32位的16进制串吗?

image

是的,你需要手动转成对应的hex串,也可以转成最原始的字节数组