pecliu / gm-crypt

国密算法JS实现。Implement of Chinese encrypt algorithm in JavaScript.
MIT License
34 stars 12 forks source link

SM4-ecb 在待加密内容包含大于0x80的字节时,加密结果错误 #5

Open zoeeer opened 1 year ago

zoeeer commented 1 year ago

问题

待加密内容中,某个字节大于等于 0x80 时,加密结果错误。

校验方法

使用在线工具 http://www.lzltool.com/SM4 的加密结果作为对比。

例子

初始化

以下例子中使用 key = 'ABCDEFGHIJKLMNOP'

const SM4 = require('gm-crypt').sm4

const sm4 = new SM4( { key: 'ABCDEFGHIJKLMNOP', mode: 'ecb' } );

例1:加密 0x0080 错误

sm4.encrypt( Buffer.from('0080', 'hex') )

// 加密结果:paO8EVoN9892D5bnp5uKxg==
// 正确结果应为:JA6bac2q2coRfY3Gh4vDDA==

例2:加密 0x0079 正确

sm4.encrypt( Buffer.from('0079', 'hex') )

// ZUbIPsOy2dqmhLgH0baOaw==
// 结果正确