虽然都是国密算法SM4,但是随着厂商不一样,每个厂商的使用方法不一样,导致厂商提供的测试SM4密钥不一样,SM4结果也不一样;区分CBC、ECB等各种模式。今天就给大家介绍一些示例,都是各种对接过程中的存货,会拆分成几个文章进行讲解。
SM4密钥:3046022100c3866c14853c82d71c8908cac7ddddf98aa255c824faa2d725fee62026ebd0a4022100b299665056ccf6f73ca179c0c6caa6e6d58811fdd3c63d834881a4c31d325132
实际密钥是使用paddingKey获取16位。
private static byte[] paddingKey(byte[] key, int bit)
{
byte[] padded = new byte[bit];
if (key.Length < bit)
{
Array.Copy(key, 0, padded, 0, key.Length);
}
else if (key.Length > bit)
{
Array.Copy(key, 0, padded, 0, bit);
}
return padded;
}
IV:pay-brand-open.1
待加密字符串:{“ecToken”:”xxxxxxxxxssssssss”,”idNo”:”340100198808089999″,”idType”:”01″,”insuOrg”:”010203″,”userName”:”测试人员”}
使用CBC模式进行SM4加密结果:
b7694c7576c789d46834e83b54b9196a39f97db09371685ecf9a40239eea6b843d10c348ad858b85be63c09c408287517957163ec5ee8768e9d614b13c43a86dd0ffc29923860eff21e8d7daa7e3c2042e2491b46cc6b249facd65caf544ed28b875021c0354d7be819b9ae9924f15b77806657efd9f48109b0f671a06d5f94f
部分代码示例:
string key = txtSM4Key.Text;
byte[] bKey = System.Text.Encoding.UTF8.GetBytes(key);
byte[] iv = System.Text.Encoding.UTF8.GetBytes(“pay-brand-open.1”);
richTextBox2.Text = SM4Utils.EncryptCBC(paddingKey(bKey, 16), iv, richTextBox1.Text);