最近项目中需要通过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. 自定义Android带图片的按钮
  2. uniapp对象怎么获取值_第65p,关于:生成器、迭代器与迭代对象(上)
  3. ACM PKU 2299 Ultra-QuickSort
  4. 两种方法清除Excel保护密码
  5. LeetCode 1874. 两个数组的最小乘积和
  6. 中国速度袋行业市场供需与战略研究报告
  7. 探秘亚马逊最特别的机器人工厂:800只机器人在奔跑,人类却没有被淘汰?
  8. weblogic启动后,抛出大量的java.lang.ArrayIndexOutOfBoundsException异常
  9. SOA架构设计和相关案例分析
  10. 语音信号预加重及matlab实现
  11. 「米聊」突然复活,雷布斯真的是出其不意
  12. 三星32英寸智能电视试用 功用全部对得起高价
  13. 网络维护类岗位做什么?
  14. Docker搭建 Nginx+PHP+MySQL 环境并部署WordPress实践
  15. 无尽神域服务器维护,关于对无尽神域的感受亲爱的无尽神域开发团队:
  16. linux系统安装在u盘
  17. Excel破解工作表保护密码
  18. Excel公式-TEXT函数使用
  19. jquery.flot 在节点上显示提示
  20. Unity3D之Rigidbody组件的使用

热门文章

  1. 百度文库付费文档完整查看_无需付费直接下载百度文库!
  2. VOSviewer 操作指南 简明
  3. 《物联网Android程序开发案例式教程》Demo3:登录页面
  4. Android小游戏——简单易懂单机人人对战五子棋源码详解
  5. 基于mint-ui的移动应用开发案例一(简介)
  6. windows10安装过程以及使用感受
  7. 12月PMP备考~通关宝典
  8. JSP的九大内置对象
  9. opencv 4.5.2 使用比色卡进行颜色校正
  10. nginx keepalived vip 高可用