国密SM3算法

新手入门 | 掌握国密算法:新手指南: SM2 / SM3 / SM4密码算法详解 在密码学领域,有多种加密与签名算法,它们在信息安全领域发挥着举足轻重的作用。如今,随着互联网的快速发展,网络安全已经成为各类信息系统完整性、可用性、保密性的重要保障,越来越多的国产密码算法得到了广泛的应用与关注。在本文中,我们将重点介绍三个经典的国产密码算法:SM2、SM3和SM4,国密是国家密码管理局正式发布的国产密码算法。本文主要针对SM2、SM3、SM4进行详细且系统的介绍,帮助大家快速掌握国密算法。国密算法是中国国家密码管理局颁布的密码算法标准,包括SM2、SM3、SM4等算法。 阅读详情

国密 SM3 算法是中国国家密码管理局发布的一种密码杂凑算法。它能将任意长度的输入数据经过处理后生成固定长度(256 位)的摘要值。SM3 算法具有较高的安全性和效率,主要用于数字签名、消息认证、数据完整性校验等方面,保障信息在存储、传输和处理过程中的安全性和可靠性。

学习资料
SM3密码杂凑算法:https://www.oscca.gov.cn/sca/xxgk/2010-12/17/1002389/files/302a3ada057c4a73830536d03e683110.pdf

在这里插入图片描述

SM3算法的基本概念

  • 描述
    对长度为l(l < 264) 比特的消息m,SM3杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。

  • 组成结构
    SM3算法由三部分组成:消息填充、消息扩展和压缩函数。

  • 消息填充
    因为SM3对消息的处理是分组进行的,每组长度64字节,如果消息的长度不是64字节的整数倍,即最后一个分组的长度不是64字节,就需要对最后一个分组进行填充。
    原述:
    在这里插入图片描述

  • 常数与函数
    在这里插入图片描述

  • 消息扩展
    在这里插入图片描述
    综上所述,可得
    在这里插入图片描述
    直观图展示如下:
    在这里插入图片描述

  • 压缩函数

    直观图展示如下:
    在这里插入图片描述

国密 SM3 算法在以下领域有广泛应用:

国密 SM3 算法在以下领域有广泛应用:
数字签名:用于生成数据的摘要,以验证数据的完整性和来源的真实性。
消息认证:确保消息在传输过程中未被篡改。
电子认证:如数字证书的生成和验证。
区块链:保证区块链中数据的完整性和不可篡改性。
密码存储:对用户密码等敏感信息进行哈希处理后存储。
金融领域:在交易数据的完整性验证、身份认证等方面发挥作用。

如何获取 SM3 算法消息摘要的示例代码

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SM3Demo {
    public static void main(String[] args) {
        String data = "Hello, SM3!";
        String digest = getSM3Digest(data);
        System.out.println("SM3 Digest: " + digest);
    }

    public static String getSM3Digest(String data) {
        try {
            MessageDigest md = MessageDigest.getInstance("SM3");
            byte[] digestBytes = md.digest(data.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : digestBytes) {
                sb.append(String.format("%02x", b & 0xFF));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
}

有哪些方法可以提高国密 SM3 算法安全性和准确性?

  • 随机化输入:在计算 SM3 哈希之前,可以对输入数据进行适当的随机化处理,增加攻击者预测输入的难度。
  • 加盐(Salt):为输入数据添加一个随机的盐值,使得相同的原始数据在不同的场景下产生不同的哈希值,防止彩虹表攻击。
  • 多次哈希:对输入数据进行多次 SM3 哈希计算,增加计算的复杂性和安全性。
  • 输入完整性校验:在计算哈希之前,确保输入数据的完整性和准确性,防止因为数据损坏或篡改导致错误的哈希结果。
  • 密钥管理:如果在加密场景中使用 SM3 与密钥相关的操作,要确保密钥的安全生成、存储和使用。
  • 代码审查和测试:对实现 SM3 算法的代码进行严格的审查和充分的测试,确保算法的实现没有漏洞和错误。
  • 遵循标准和规范:严格按照国密相关的标准和规范来使用和实现 SM3 算法,以保证其安全性和准确性。
  • 监控和更新:持续监控算法的安全性研究进展,及时更新和改进应用中的算法实现,以应对可能出现的新的攻击手段。

举例,通过增加生成盐值和将输入与盐值组合后计算哈希来实现,如下代码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class EnhancedSM3Example {

    public static void main(String[] args) {
        String input = "Hello, SM3!";
        String salt = generateSalt();
        String hash = calculateEnhancedSM3Hash(input, salt);
        System.out.println("Enhanced SM3 Hash: " + hash);
    }

    public static String generateSalt() {
        // 生成一个随机的盐值
        StringBuilder saltBuilder = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            int randomNum = (int) (Math.random() * 10);
            saltBuilder.append(randomNum);
        }
        return saltBuilder.toString();
    }

    public static String calculateEnhancedSM3Hash(String input, String salt) {
        try {
            MessageDigest md = MessageDigest.getInstance("SM3");
            String combinedInput = input + salt;
            byte[] hashBytes = md.digest(combinedInput.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : hashBytes) {
                sb.append(String.format("%02x", b));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
}

国密 SM3 算法的实际应用案例

  • 金融交易系统:用于验证交易数据的完整性和真实性,防止数据被篡改。
  • 电子政务:保障政务数据在传输和存储过程中的安全性。
  • 物联网设备:对设备传输的数据进行哈希计算,确保数据未被篡改。

例如,在一个金融交易的应用中,每一笔交易数据在生成后可以使用 SM3 算法计算其摘要值,并将摘要值与交易数据一同存储。在后续的验证过程中,重新计算交易数据的摘要值,并与之前存储的摘要值进行对比,以确认交易数据是否完整和未被篡改。

国密哈希hash算法SM3原理分析 无限制512bit32bit4128bit。 阅读详情

相关推荐

加密算法解析三:SM3

国家密码局发布的算法不仅有SM3,还有SM1、SM2、SM4、SM7、SM9等,它们的设计和结构都不同,并不是SM3的改进或前期版本。:SM3没有直接使用数据分组进行运算,而是先对每个512bit分组进行划分,每个分组划分成16个消息字,再以这16个消息通过函数递推出后面的116个消息字,即每个512bit原文可以产生132个消息字(每个消息字32bit)。:相当于MD5和SHA的补位和添加长度,先增1和若干个0补成对512求模得448的长度,然后再添加原文长度的64位二进制。缺点:大数据量下加密速度慢。

积水成多,水到渠成 8917

【SM3哈希算法】算法原理

SM3算法是一种密码散列函数标准,由国家密码管理局发布。它的安全性和SHA-256相当,适用于商用密码应用中的数字签名和验证、消息认证码生成和验证、随机数生成等。

qq_53099119的博客 1万+

[python]国密SM3算法的实现

#-------以下函数也可用于其它算法中--------- def rotation_left(x, num): # 循环左移 num %= 32 left = (x << num) % (2 ** 32) right = (x >> (32 - num)) % (2 ** 32) result = left ^ right ...

weixin_43936250的博客 9987

SM3加密算法详解(2021-12-8)

原文作者链接:https://zhuanlan.zhihu.com/p/129692191 国密局官方文档:http://www.sca.gov.cn/sca/xwdt/2010-12/17/content_1002389.shtml 整个算法的执行过程可以概括成四个步骤:消息填充、消息扩展、迭代压缩、输出结果。 文章目录SM3概述消息填充消息扩展迭代压缩输出结果 SM3概述 SM3密码杂凑算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准。具体算法标准原始文本参见参考文献[1]。该算法于.

qq_40662424的博客 6万+

国密算法SM2、SM3、SM4 的JAVA实现(结合Hutool)

国密算法SM2、SM3、SM4 的JAVA实现(结合Hutool)

MR.骑士道 3万+

PKI - 一文读懂SM1、SM2、SM3、SM4等国密算法

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。国密算法是指国家密码管理局认定的一系列国产密码算法,包括SM1-SM9以及ZUC等。其中SM1、SM4、SM5、SM6、SM7、SM8、ZUC等属于对称密码,SM2、SM9等属于公钥密码 (非对称加密)SM3属于单向散列函数。目前我国主要使用公开的SM2、SM3、SM4作为商用密码算法。其中SM1、SM7算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

smart_an的专栏 2675

国密算法SM1、SM2、SM3、SM4介绍

密算法是由国家密码管理局发布的一系列国产商用密码标准算法

moonNife的专栏 7965

JAVA-国密算法SM3和SM4应用Example

参考资料: https://baijiahao.baidu.com/s?id=1629915330021466224&wfr=spider&for=pc https://github.com/chenliwu/gmhelper Maven引入加密算法库 <!-- 国密算法 --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-

举世武双的博客 5129

国密SM2/SM3算法

国密SM2/SM3算法

m0_56344192的博客 9623

java实现国密算法SM3摘要加密

java实现SM3摘要加密

梓隽的博客 1759

国密算法SM3-java实现

Maven依赖 <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.56</version> </dependency> SM3Utils import org.bouncycastle.crypto.digests.SM3Digest; i

qq_41332611的博客 5646

国密算法SM3与SM4简介与应用

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~最近0基础在学习国密算法的相关应用,故此和大家分享下自己的一些经历。程序平台: Ubuntu16.04...

Pou光明的博客 1万+

国密算法SM3

然后,我们使用MessageDigest.getInstance("SM3", "BC")来获取一个SM3哈希运算的实例。国密算法SM3是一种密码杂凑算法,适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法。请注意,为了使用SM3算法,你需要一个支持国密算法的加密库,比如GMJCE(国密Java加密扩展包)或者Bouncy Castle。另外,如果你在处理敏感数据或需要符合特定的安全标准,请务必确保你的代码符合相关的安全最佳实践,并考虑使用经过认证的加密库和工具。

java专栏 1045

国密算法SM3的GmSSL代码实现Demo

SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。 在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。据国家密码管理局表示,其安全性及效率与SHA-256相当。

mickey2007的博客 1615

国密SM3杂凑算法

SM3算法是由我国著名的密码学家王小云和国内其他专家共同设计的哈希算法,它只能用于加密而不能解密,是一种简单的单向算法。于2010年12月17日经国家密码管理局发布,现已广泛应用于金融、交通、国家电网等重要经济领域,并于2018年10月正式成为ISO/IEC国际标准。SM3算法首先将输入数据按照512位(64字节长度)的大小分成若干组,最后一组不足512位时按规则填充至512位。经过多轮迭代压缩后,输出长度为256位(32字节)的数值。就是对长度为l(l.....................

应无所住而生其心 9932

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 298

国密算法SM2、SM3

国密算法、SM2、SM3

qq_37119960的博客 2684

手把手教你为智能手表DIY一个离线导航:LVGL + SD卡地图实战

本文详细介绍了如何为智能手表DIY一个离线导航系统,结合LVGL图形库和SD卡地图数据。从硬件选型、地图数据处理到LVGL地图引擎实现,提供了完整的实战指南,特别适合户外运动爱好者和嵌入式开发者。文章还分享了功耗优化、性能提升等实用技巧,帮助读者打造高效的离线导航解决方案。

weixin_42570484的博客 206

国密算法SM3的GmSSL代码Android实现Demo

SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。 在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。据国家密码管理局表示,其安全性及效率与SHA-256相当。

mickey2007的博客 1457

【AI智能体】Coze 搭建个人旅游规划助手实战详解

本文将详细介绍如何使用Coze平台搭建个人旅游规划助手。首先概述了AI智能体如何简化传统复杂任务的开发流程,然后重点介绍了Coze工作流的作用和核心节点类型(包括大模型、插件、知识库等)。通过实际操作演示,从创建智能体到配置多级工作流,逐步实现旅游规划功能:解析用户输入时间地点、查询必玩景点、获取景点详细信息等。该教程展示了如何利用Coze的可视化编排能力,即使非技术人员也能快速构建专业级AI应用。最终呈现的旅游助手可提供天气查询、行程建议等一站式服务。

Hello, New World! 2117

OpenFOAM-多孔介质模型(porous media)

文章目录一、多孔介质(porous media)二、使用步骤1.达西定律2.Darcy-Forchheimer3.OpenFOAM fvOptions4.paraview动画每帧显示时间(Annotate Time)5.参考内容总结 一、多孔介质(porous media) 在流体力学中,流体流经多孔介质是指流体流经多孔介质时的行为方式,如海绵或木材,或使用沙子或其他多孔材料过滤水。 我们将展示如何设置多孔层,并使用OpenFOAM模拟流体通过该介质。 二、使用步骤 1.达西定律 达西定律最初是由达西通.

zq93538196的博客 9938

openGauss支持国密SM3和SM4算法

...

openGauss的博客 1807

SigmaStudio进阶技巧:如何用ADAU1701实现60段EQ与防啸叫算法

本文深入探讨了如何在ADAU1701 DSP芯片上实现专业级音频处理系统。通过精密的资源规划与架构设计,详细讲解了构建高达60段参数均衡器(EQ)的有效方法,并集成了移频与自适应陷波双策略的智能防啸叫算法。内容涵盖从SigmaStudio工程优化、算法模块组合到系统联调实战的全流程,旨在帮助中高级开发者充分利用ADAU1701性能,打造稳定、高效的音频处理解决方案。

weixin_28256233的博客 385
上一篇: Kafka - 分布式发布订阅消息系统
下一篇: Git 使用详细教程(入门到实战)
IT_WEH_coder
博客等级 码龄5年 2万+粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_WEH_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值