Closed yangwenbo closed 3 years ago
SM3在输入字符串为中文时有编码错误。原因是 str2binary函数对每个字符进行二进制转换, binary += leftPad(ch.codePointAt(0).toString(2), 8) 这里直接num传入了8,没有考虑中文作为字符串输入的情况。 再根据 leftPad 的实现,input.length超过8时直接返回,没有对高位补0。 因此当中文字符作为输入时,是超过8比特的(例如utf-8编码),没有对其高位补0,导致从中文字符开始后面的binary都错乱了,因为没有8比特补齐。
另外在这个项目中也有同样的问题 https://github.com/JuneAndGreen/sm-crypto
已支持:https://github.com/wechat-miniprogram/sm-crypto/blob/029832a33a2df3ca409684b2cb6e7644ec58589b/test/sm3.test.js#L18
SM3在输入字符串为中文时有编码错误。原因是 str2binary函数对每个字符进行二进制转换, binary += leftPad(ch.codePointAt(0).toString(2), 8) 这里直接num传入了8,没有考虑中文作为字符串输入的情况。 再根据 leftPad 的实现,input.length超过8时直接返回,没有对高位补0。 因此当中文字符作为输入时,是超过8比特的(例如utf-8编码),没有对其高位补0,导致从中文字符开始后面的binary都错乱了,因为没有8比特补齐。
另外在这个项目中也有同样的问题 https://github.com/JuneAndGreen/sm-crypto