最近项目中需要通过C语言实现SM2、SM4国密算法,这里我基于GMSSL来进行实现,已在5种环境下实现,并已使用在生产环境中。

1、GMSSL编译

GMSSL编译在不同环境下都不一样,这里我提供Window64、Arm64、Linux64、Android、himix200海思芯片 环境编译方法,传送门如下:

Gmssl官网地址

Gmssl 各平台编译方法【绝对可用】

如果各位都是比较懒得人,我这里也给各位提供上述五种环境已经编好的库,传送门如下:

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算法,可以直接使用以下代码(和使用库是一样的),传送门如下:

SM4纯净版实现(不依赖任何库)

C语言SM4算法实现(基于GMSSL)相关推荐

  1. C语言实现SM3(基于GMSSL)

    上一篇文章已经完成了调用gmssl测试Sm4算法实现,https://blog.csdn.net/lingdukafeibj/article/details/107493356 本文继续测试SM3算法 ...

  2. c语言排序算法 应用与实现,基于C语言排序算法改进与应用.doc

    基于C语言排序算法改进与应用 基于C语言排序算法改进与应用 摘 要:介绍了程序语言中排序的原理及应用,阐述了基于C语言的三种主要排序方法,提出了每种排序方法的改进,计算出改进后算法的时间复杂度,编写了 ...

  3. 广义相加模型(GAM)与向前逐步选择算法(基于R语言)

    广义相加模型(GAM)与向前逐步选择算法(基于R语言) 一.题目 (a)使用College数据集,以Outstate作为响应变量,其余作为预测变量,使用逐步回归得到一组合适的预测变量的子集. (b)将 ...

  4. c语言sm4加密算法,SMS4算法实现

    最近浏览了一下国密办的官方网站,新公布了国密算法标准,其中有SM4算法,说明为原SMS4算法,既无线局域网标准的分组数据算法,可参考 :http://www.oscca.gov.cn/News/201 ...

  5. 国密算法java语言的实现:利用bcprov和hutool库分别实现国密SM4算法工具类,对称密钥

    SM4算法成为行业标准: SM4分组密码算法是2012年3月21日实施的一项行业标准: 2021年6月25日,我国SM4分组密码算法作为国际标准ISO/IEC 18033-3:2010/AMD1:20 ...

  6. java break 在if 中使用_java中使用国密SM4算法详解

    前言 上次总结了一下加密算法的分类(加密算法有集中形式,各有什么不同?),现在我们用java语言实现一下SM4:无线局域网标准的分组数据算法.对称加密,密钥长度和分组长度均为128位. ps:我们既可 ...

  7. 基于 gmssl实现的sm2加密(C++)

    项目中需要用到sm2加密,在网上搜索了一下相关的库,发现只有openssl和gmssl这两个库可以用,于是基于gmssl库做了封装,gmssl的版本是:GmSSL 2.5.4 - OpenSSL 1. ...

  8. 杨鹏谈世纪佳缘推荐算法:基于Spark GraphX,弃GBDT和LR用FM

     杨鹏谈世纪佳缘推荐算法:基于Spark GraphX,弃GBDT和LR用FM 发表于2015-09-30 09:53| 1447次阅读| 来源CSDN| 2 条评论| 作者杨鹏 机器学习推荐算法 ...

  9. 机器学习算法-10贝叶斯信念网络、聚类算法、基于密度的方法DBSCAN

    贝叶斯信念神经网络 bayes belief network (BNN), 朴素贝叶斯分类器需要特征之间相互独立的强条件,制约了模型的适用, 用有向无环图表达变量之间的依赖关系,变量用节点表示,依赖关 ...

  10. 国密SM4算法(简介与C源码)

    国密即国家密码局认定的国产密码算法,即商用密码. 国密算法是国家密码局制定标准的一系列算法.其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法.具体包括SM1,SM2,SM3,SM4等,其中:S ...

最新文章

  1. c# datatable.select() 支持group by
  2. 浏览器中的机器学习:使用预训练模型
  3. IDEA无法通过类加载器获取resources文件夹配置文件解决办法
  4. c语言统计数据,数据统计
  5. Oracle应用集群详解
  6. Google Guava BiMaps
  7. 一个IO的传奇一生 (9) -- Noop和Deadline调度器
  8. php mysql设计中验证码的实现_利用PHP绘图函数实现简单验证码功能
  9. ocx在我indows7无法注册
  10. 【JS中innerHeight/Width、clientHeight/Width和offsetHeight/Width使用及其详解】
  11. 【备忘】零基础学习java学习路线,从菜鸟到大牛的视频教程
  12. 汇编程序设计语言所用环境MASM的使用
  13. 文件管理大师android,文件管理大师
  14. 微信跳一跳python_用python来玩微信跳一跳
  15. 查看mysql版本的方法
  16. 数据分析之Hadoop详解
  17. 租用云主机可以做什么用?
  18. android studio安装apk时,vivo 部分手机出现 解析软件包错误
  19. 财务分析与决策——绪论
  20. 浏览器版本重新判断(IE11革新后)

热门文章

  1. 解决2345劫持主页的办法--火绒2345专杀
  2. 2011年浙江计算机二级vfp是什么,2011年计算机二级VFP考试基础教程(21)
  3. 傻妞机器人老版安装教程
  4. 清理谷歌浏览器注册表_注册表修改默认浏览器(建议Chrome)
  5. Python语法糖系列
  6. 如何删除vc2013上配置好的opencv
  7. java 解析m3u8的实例_ck播放器m3u8直连代码
  8. vue如何设置视频封面_vue怎么制作朋友圈封面视频 vue制作朋友圈视频方法
  9. 老K整理|4月|物流技术圈职位招聘合集!
  10. 遗传算法经典实例代码_利用遗传算法优化GANs