大佬, 为啥用cnpack的sm4算出来的和C#、java的不一样呢?
Arvin-Feng opened this issue · comments
分组加密考虑的因素有很多:
1、每块的加密算法(DES/AES/SM4等)
2、数据分块的每块大小(128/192/256等)
3、块与块之间的运算模式(ECB/CBC等)
4、数据不满足整数块时如何填充(PKCS1/PKCS7等)
5、密文是否要转变成可读的(Hex/Base64等)
两个加密机制,但凡有一处和所需的不一样,加密出来的结果就对不上号。
要先确定一下字符串是什么编码。
猜测你的Java和C#都是将字符串转成了UTF8后加密,但Delphi没有指定UTF8,导致加密的原始内容不同。
4、数据不满足整数块时如何填充(PKCS1/PKCS7等)
——从图中看出是填充方式的差异。你的工具用的是PKCS7的填充,我们的工具用的是尾部加#0填充。
哦, 了解,谢谢。
CnPack的SM4库改用PKCS7Padding的方式加密后,和楼主提供的结果一致。
请问, 怎么改啊,demo里没看到参数啊。
哦, 看到了, 我试试。
嗯,我更新了Demo,加上了Padding这个选项供测试。
非常感谢,辛苦了。