国密算法初探 | 入门教程 | 解析

news2024/11/28 4:28:00

国密算法即国家密码局认定的国产密码算法。

  • 国密算法是商用密码,仅能用于商业用途。
  • 国密算法是一套标准,由国家密码局制定的规范,凡是符合的,都可以称之为国密算法。
  • 国密算法暂无官方的代码实现,企业可以自己编码实现,并申请国家密码局认证,通过后即被认可。
  • SM系列密码算法是国密算法的一种,SM是商密的缩写,SM后的序号分别表示了不同种类的密码(应用场景不同)。
  • 国密算法对标国际算法,国际算法由美国的安全局发布,是现今最通用的商用算法,也是在各种密码学教材中重点介绍的。

SM系列国密算法

SM系列算法主要有SM1,SM2,SM3,SM4,SM7和SM9。SM1和SM7算法没有公开,主要用于芯片集成(采用硬件实现,直接嵌入),如智能IC卡、加密机、身份证和一卡通等。目前应用较多的是SM2、SM3和SM4算法,采用软件实现,这三者用法不一。

  • SM2属于非对称加密算法,使用公钥加密,私钥解密,在安全性和运算速度方面要优于RSA算法。
  • SM3属于不可逆加密算法,类似于md5,常用于签名。
  • SM4属于对称加密算法,可用于替代DES/AES等国际算法,SM4算法与AES算法具有相同的密钥长度和分组长度,都是128位。

国密算法标准

由国家密码管理局管理和发布,国家密码管理局的官方网站是:

https://www.oscca.gov.cn/sca/index.shtml

国密算法标准文档查询:

https://www.oscca.gov.cn/app-zxfw/zxfw/bzgfcx.jsp

可以提供电子认证服务的机构名单:

https://www.oscca.gov.cn/app-zxfw/xzspsx/dzzwdzrzfuwujigouml.jsp?channel_code=c100144

国密算法的开源实现

目前比较有名的是北京大学的关志研究员在 GitHub 上的开源项目,毕竟涉及安全,背书还是很重要的。

全套的国密算法标准文档:

GitHub - guanzhi/GM-Standards: 中华人民共和国密码行业标准(GM/T)文本

GMSSL,一个类似 OpenSSL 的商密算法工具。

https://www.gmssl.cn/gmssl/index.jsp

GmSSL项目也是由北京大学关志研究员的密码学研究组开发维护,项目源码托管于GitHub:

GitHub - guanzhi/GmSSL: 支持国密SM2/SM3/SM4/SM9/SSL的密码工具箱

GmSSL是由北京大学自主开发的国产商用密码开源库,实现了对国密算法、标准和安全通信协议的全面功能覆盖,支持包括移动端在内的主流操作系统和处理器,支持密码钥匙、密码卡等典型国产密码硬件,提供功能丰富的命令行工具及多种编译语言编程接口。

GmSSL是从鼎鼎大名的开源安全库 OpenSSL fork而来,研究其源码可以看出它是基于OpenSSL 1.1.0d开发。GmSSL与OpenSSL保持接口兼容,理论上使用OpenSSL库的产品,可以直接使用GmSSL替换。GmSSL项目采用对商业应用友好的类BSD开源许可证,无论是在开源项目,还是闭源的商业应用中,都可以放心使用,不必担心授权问题。

其他实现

java 代码参考链接 https://github.com/hou-xx/encryption-and-decryption 的 SmDemo.javaSmDemoForJs.java
前端代码(h5+js)参考链接 https://github.com/hou-xx/SM2-front

java bcprov 国密 依赖 jar包 版本 升级 降级 教程_bcprov-jdk16_九二战歌的博客-CSDN博客

在线加解密工具

在线生成sm2公钥私钥:

SM2 密钥在线生成工具

在线加密链接:

DES在线解密 DES在线加密 des hex - The X 在线工具

参考文章

了解国密算法的分类(SM1-9和祖冲之密码的介绍):国密算法分类 - 知乎

国密算法与国际算法的对比:国密算法学习整理_海洋中的一滴的博客-CSDN博客

国密算法GMSSL介绍:初识国密算法_国密算法收费吗_云水木石的博客-CSDN博客

基于java的前后端实现国密:国密算法纯软件实现(java+javascript ) - 简书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Numpy实现简单的神经网络

目录 数据预处理模型设计训练过程小批量随机梯度下降 用numpy实现神经网络对波士顿房价进行预测 假设房价和各影响因素之间能够用线性关系来描述: y ∑ j 1 M x j w j b y { \sum_{j1}^Mx_j w_j} b yj1∑M​xj​wj​b 模型的求解即是通过数据拟合出每个 w j w_…

使用思维导图做出Mybatis核心配置文件中各层及结构以及常用标签的意义和详细作用.

一、配置文件概述 Mybatis 配置文件两大类:1.Mybatis 主配置文件;2.Mybatis 的 mapper 文件 Mybatis 主配置文件: 提供 Mybatis 全局设置的。包含的内容、日志、数据源、mapper 文件位置等信息。Mybatis 的 mapper 文件: 写 sql …

linux 中的 gdb 调试方法和技巧(有截图超详细)

一、 背景 1. 程序的发布方式有两种,debug模式和release模式 2. Linux gcc/g出来的二进制程序,默认是release模式 3. 要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项 如下图: 不加 -g 默认是 relea…

【Java】快速排序

文章目录 一、什么是快速排序二、基准元素的选择1、选择第一个元素2、随机选择 三、元素的交换1、双边循环法2、单边循环法 一、什么是快速排序 快速排序是由冒泡排序演变而来,比冒泡排序更快的排序算法。之所以快,是因为快速排序用了分治法。 相同的是…

基于均值方差最优化资产配置的模型特性

摘要及声明 1:本文主要利用实际数据进行检验,从定量角度分析均值方差最优化的特性; 2:本文主要为理念的讲解,模型也是笔者自建,文中假设与观点是基于笔者对模型及数据的一孔之见,若有不同见解…

Linux最小安装网络配置、jdk安装以及虚拟机克隆的操作(超详细过程)

一、最小安装配置网络 1、配置文件: 进入“/etc/sysconfig/network-scripts”目录,查看当前目录下的“ifcfg-ens33”文件 对“ens33”文件进行配置 2、重启网络: 使用“systemctl restart network”命令即可 3、ping网络,如果…

【Proteus仿真】51单片机+步进电机驱动

【Proteus仿真】51单片机步进电机驱动 🔖Proteus仿真基础实验-步进电机驱动🌿Proteus8.12平台 📋步进电机简介 步进电机是一种将电脉冲转换为角位移的开环控制元步进电机。一般地,当步进驱动器接收到脉冲信号时,它将根…

企业邮箱购买指南:分享如何购买适合企业的企业邮箱

如果你想为你的公司设立一个新的公司邮箱帐户,有几种不同的选择可供选择。根据公司的规模和需求,你可以从邮箱托管公司购买一个邮箱地址,购买域名并创建一个自定义邮箱地址,或者与第三方提供商合作。无论您选择哪种方法&#xff0…

服务(第三十四篇)ceph-分布式存储

什么是ceph? ceph 是一种统一的分布式文件系统,具有优秀的性能、高可用性和可扩展性。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为 openstac…

机器学习强基计划10-2:详细推导串行集成AdaBoost算法(附Python实现)

目录 0 写在前面1 串行集成学习2 AdaBoost原理推导3 Python实现3.1 算法流程3.2 核心代码3.3 可视化 0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模…

chatgpt赋能python:Python数据处理之去除NaN值

Python 数据处理之去除 NaN 值 作为数据分析和处理领域中的一种高效工具,Python 在数据清理方面表现优异。而 NaN 是数据处理中常见的问题之一,过多的 NaN 值常常会导致分析结果不准确或无法得出结论,因此 Python 提供了多种方法去除 NaN 值…

chatgpt赋能python:Python反转数字的方法

Python反转数字的方法 Python作为一种高级编程语言,拥有着丰富的数学计算、数组处理及字符串操作等功能。在实际开发中,需要进行反转数字的操作时,Python提供了多种方法来完成此项任务。 用Python反转数字 反转数字是指将一个数字从后往前…

SQL语句之DML语言

说明:DML(Data Manipulation Language),用来对数据库中表的数据记录进行增、删、改操作。注意,没有查询,数据的查询单独拎出来成DQL(Data Query Language,数据查询语言)&…

吴恩达 ChatGPT Prompt Engineering for Developers 系列课程笔记--03 Iterative

03 Iterative 本节主要通过代码来讲解如何在迭代中找到合适的prompt。对于初学者来说,第一次使用Prompt不一定得到语气的结果,开发者可以采用下述流程进行迭代优化: 给出清晰、具体的指令如果结果不正确,分析原因调整prompt重复…

ClickHouse的join优化

概要: ClickHouse 最为擅长的领域是一个大宽表来进行查询,多表 JOIN 时Clickhouse 性能表现不佳。 CK执行模式 第一阶段,Coordinator 收到查询后将请求发送给对应的 worker 节点;第二阶段,Coordinator 收到各个 work…

Java内存模型和常见的内存溢出类型及解决方案

Java内存模型与常见的内存溢出 一. Java 运行过程和内存分配1 Java的平台无关性2 Java内存模型2.1Java内存模型图 3 内存结构详解3.1 元空间(MetaSpace)3.2 堆区(Heap)新生代老年代 3.3 虚拟机栈(VM Stack)…

Linux :: vim 编辑器:详解:光标移动定位内容,行间:快速定位至文本:开头 / 结尾;行内:词间跳跃

前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 前言&#x…

Asana替代方案推荐:盘点2023年8种优质的免费和付费替代工具

Asana是一个项目管理和团队合作软件平台,自2008年成立以来,一直在彻底改变团队合作的方式。Asana以其直观的用户界面而闻名,是项目经理和团队领导的热门选择。然而在快节奏的项目管理世界中,技术发展很快。因此,当涉及…

chatgpt赋能python:Python取余方法介绍

Python取余方法介绍 在Python编程中,取余(也称为求模运算或取模运算)是计算机程序经常使用的一种基本算术运算。Python提供了两种方法来执行取余运算:使用百分号符号(%)和divmod()函数。 使用百分号符号&…

揭秘HTTP代理的神奇力量:让你的系统突破内网限制

大家好,我是你们的小米!今天,我要和大家聊聊一个技术问题,那就是关于"http代理"的使用。昨日,我刚刚午休睡醒,项目经理杰哥叫我关注下其中一个项目的部署进展情况。而就在这时,客户侧…