C语言SM4算法实现(基于GMSSL)
Posted 张志翔 ̮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言SM4算法实现(基于GMSSL)相关的知识,希望对你有一定的参考价值。
最近项目中需要通过C语言实现SM2、SM4国密算法,这里我基于GMSSL来进行实现,已在5种环境下实现,并已使用在生产环境中。
1、GMSSL编译
GMSSL编译在不同环境下都不一样,这里我提供Window64、Arm64、Linux64、android、himix200海思芯片 环境编译方法,传送门如下:
如果各位都是比较懒得人,我这里也给各位提供上述五种环境已经编好的库,传送门如下:
Gmssl链接库(himix200、android、arm64、linux64、windows64)
2、SM4实现
#include <openssl/sms4.h>
int main(void)
//加密参数初始化
sms4_key_t sms4_key_enc;
unsigned char *plain_text = 0 ;
unsigned char *key = "01234567891234560123456789123456";
unsigned char *iv = "0123456789123456";
//SM4加密
memcpy(sms4_key.rk, key, 32);
sms4_set_encrypt_key(&sms4_key, iv);
sms4_cbc_encrypt(plain_text, enc_text, 64, sms4_key_enc.rk, iv, 1);
//解密参数初始化
sms4_key_t sms4_key_decrypt;
//SM4解密
memcpy(sms4_key.rk, key, 32);
sms4_set_decrypt_key(reinterpret_cast<sms4_key_t *>(sms4_key_decrypt->rk), iv);
sms4_cbc_encrypt((uint8_t *) data, plaintext, 64,
reinterpret_cast<const sms4_key_t *>(sms4_key_decrypt->rk), iv, 0);
return 0;
这里实现我写的是伪代码,主要就是注意三个函数 sms4_set_encrypt_key、sms4_set_decrypt_key、sms4_cbc_encrypt 就可以实现了。
SM4代码我已从GMSSL库中抽取出来,如果不想引入GMSSL库就实现SM4算法,可以直接使用以下代码(和使用库是一样的),传送门如下:
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系以上是关于C语言SM4算法实现(基于GMSSL)的主要内容,如果未能解决你的问题,请参考以下文章