前几年做这个国标加解密的对接,发现.net和Java底层不同导致加密的结果不一样。
最近发现网络有大神编写的专门的dll来解决.net 上sm4加解密问题。
这里引用的是 KYSharp.SM.dll;(PS:网上看到还有诸如Sw.ChinaEncryptSM的)
using KYSharp.SM;
String plainText = "{\"order_status\":\"3\",\"name\":\"测试人员\",\"idcard_value\":\"330100********0000\",\"idcard_type\":\"01\"}";
SM4Utils sm4 = new SM4Utils();
sm4.secretKey = "726be1646879423e26eb7977c4d80c48";
sm4.hexString = true;
System.Console.Out.WriteLine("ECB模式");
String cipherText = sm4.Encrypt_ECB(plainText);
System.Console.Out.WriteLine("密文: " + cipherText);
System.Console.Out.WriteLine("");
plainText = sm4.Decrypt_ECB(cipherText);
System.Console.Out.WriteLine("明文: " + plainText);
System.Console.Out.WriteLine("");
Console.ReadLine();
这里注意的有
一、sm4.hexString = true; //
((!hexString) ? Encoding.Default.GetBytes(secretKey) : Hex.Decode(secretKey));
二、iv="" //iv默认为空
三、SM4加解密的模式分为 ECB 和BCB两种 使用时要注意类型
四、关于加解密乱码问题 如果发送端和接收端电脑主机的编码格式不一样 如一端是uft-8 另一端是GBK 则基本上都会乱码 (win系统 cmd窗口 输入chcp 936对应GBK,65001对应UTF-8)
3680

被折叠的 条评论
为什么被折叠?



