SM3加密应用

何为sm3加密?

SM3是由中国国家密码管理局设计的一种密码杂凑函数,类似于SHA-256和MD5等国际标准的散列算法。SM3算法是中国国家标准《GB/T 32905-2016 信息安全技术 SM3密码杂凑算法》的一部分,用于数字签名和数据完整性验证等领域。

SM3算法的特点

  1. 输出长度:SM3算法的输出散列值长度为256位(32字节)。
  2. 安全性:SM3设计上具有较高的安全性,抵御已知的各种攻击,如碰撞攻击和长度扩展攻击等。
  3. 性能:SM3的性能与SHA-256相当,在大多数现代计算机平台上表现良好。

使用SM3加密

SM3本质上是一种杂凑函数,不是加密算法。因此,使用SM3的目的是生成固定长度的散列值,而不是加密数据以供后续解密。典型应用包括:

      • 数据完整性校验
      • 数字签名
      • 密码验证

如何确认sm3算法是否匹配及准确可以使用一下验证网站来验证

可以使用此网站来进行验证https://config.net.cn/tools/SM3.html

如何在C#中实现呢?

由于.NET框架中没有内置SM3实现,你可以使用第三方库,比如BouncyCastle库来实现SM3。

首先,需要安装BouncyCastle库。可以使用NuGet包管理器安装:

或者点击项目鼠标右键如下操作:

点安装,完成库的引用。

以下是C#中实现的一个类:

public class SM3Help
{
public static string CalculateSM3Hash(string input)
{
// 创建SM3摘要实例
IDigest digest = new SM3Digest();

// 将输入字符串转换为字节数组
byte[] inputBytes = Encoding.UTF8.GetBytes(input);

// 更新摘要数据
digest.BlockUpdate(inputBytes, 0, inputBytes.Length);

// 获取摘要大小并创建一个足够大的字节数组来存储哈希值
byte[] hash = new byte[digest.GetDigestSize()];

// 完成哈希计算并将结果存储在hash数组中
digest.DoFinal(hash, 0);

// 将哈希值转换为十六进制字符串并返回
return Hex.ToHexString(hash);

}
public static string GenerateSm3Hash(string input)
{
try
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input);

byte[] hashBytes = SM3.ComputeHash(inputBytes);

return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}
catch (Exception ex)
{
Console.WriteLine("GenerateSm3Hash error: " + ex.Message);
throw;
}

}
}

如何实现sm3加密的更多相关文章

  1. java sm3加密算法

      java sm3加密算法实现 CreationTime--2018年7月13日09点28分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59.ja ...

  2. go-dongle 0.2.0 版本发布了,一个轻量级、语义化的 golang 编码解码、加密解密库

    dongle 是一个轻量级.语义化.对开发者友好的 Golang 编码解码和加密解密库 Dongle 已被 awesome-go 收录, 如果您觉得不错,请给个 star 吧 github.com/g ...

  3. 《基于Arm实验箱的国密算法应用》课程设计 结题报告

    <基于Arm实验箱的国密算法应用>课程设计 结题报告 小组成员姓名:20155206赵飞 20155220吴思其 20155234昝昕明 指导教师:娄嘉鹏 设计方案 题目要求:基于Arm实 ...

  4. 2015520吴思其 基于《Arm试验箱的国密算法应用》课程设计个人报告

    20155200吴思其 基于<Arm试验箱的国密算法应用>课程设计个人报告 课程设计中承担的任务 完成试验箱测试功能4,5,6以及SM3加密实验的实现 测试四 GPIO0按键中断实验 实验 ...

  5. WebService之Spring+CXF整合示例

    一.Spring+CXF整合示例 WebService是一种跨编程语言.跨操作系统平台的远程调用技术,它是指一个应用程序向外界暴露一个能通过Web调用的API接口,我们把调用这个WebService的 ...

  6. gmlib密码算法库

    gmlib密码算法库 一.gmlib密码算法库简介 支持国密 SM4/AES-ECB/CBC/GCM,SM3,SM2签名/加密,ZUC算法 的密码库,文档页面GMLib Docs ,项目地址 gmli ...

  7. crypto-gmsm国密算法库

    crypto-gmsm国密算法库 一.开发背景 crypto-gmsm国密算法库是国密商密算法(SM2,SM3,SM4)工具类封装,国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主 ...

  8. sm-crypto密码算法库

    一.环境配置 在之前的node.js库配置中,我们已经配置好了node和npm,再次检查配置情况 node -v npm -v npm install --save miniprogram-sm-cr ...

  9. AES SHA-1 SM3 MD5

    AES是美国国家标准技术研究所NIST旨在代替DES的21世纪的加密标准. 输入:128bit 的消息分组 输出:128bit 的密文分组 密钥长度及圈数 128 10 192 12 256 14 消 ...

  10. SM3杂凑算法Python语言实现——第三部分

    SM3杂凑算法实现--第三部分 一.SM3 密码概述        我们首先把需要用到的算法呈现出来,最后我们再考虑如何集合为一个库的方法,这一部分我们就开始编写一个新的算法:国家商用密码标准SM3密 ...

随机推荐

  1. RestfulApi 学习笔记——分页和排序(六)

    前言 分页和排序时一些非常常规的操作,同样也有一些我们注意的点. 正文 分页 先来谈及分页. 看下前端传递的参数. public class EmployeeDtoParameters { priva ...

  2. React中类组件和函数组件

    一.类组件 类组件,顾名思义,也就是通过使用ES6类的编写形式去编写组件,该类必须继承React.Component 如果想要访问父组件传递过来的参数,可通过this.props的方式去访问 在组件中 ...

  3. springboot+thymeleaf+mybatis实现甘特图(代码非常详细)

    首先我们要明白:这个甘特图需要哪些动态数据. (1)需要:ID,tName,number,计划开始时间,开始时间,计划结束时间,结束时间,项目负责人,参与人,知情人ID,计划时长(可以计算得出的,不必 ...

  4. ASP.NET CORE 框架揭秘读书笔记系列——命令行程序的创建(一)

    一.dotnet --info 查看本机开发环境 dotnet --info  会显示本机安装的SDK版本.运行时环境.运行时版本 二.利用命令行创建.NET项目 我们不仅可以利用脚手架模版创建各种类 ...

  5. 鸿蒙HarmonyOS实战-ArkUI动画(放大缩小视图)

    前言 在HarmonyOS中,可以通过以下方法放大缩小视图: 使用缩放手势:可以使用双指捏合手势来放大缩小视图.将两个手指放在屏幕上,并向内或向外移动手指,即可进行放大或缩小操作. 使用系统提供的缩放 ...

  6. iLogtail 与Filebeat 性能对比

    ​简介:前段时间, iLogtail 阿里千万实例可观测采集器开源,其中介绍了iLogtail采集性能可以达到单核100MB/s,相比开源采集Agent有5-10倍性能优势.很多小伙伴好奇iLogta ...

  7. 基于 MaxCompute + Hologres 的人群圈选和数据服务实践

    ​简介: 本文主要介绍如何通过 MaxCompute 进行海量人群的标签加工,通过 Hologres 进行分析建模,从而支持大规模人群复杂圈选场景下的交互式体验,以及基于API的数据服务最佳实践. 本 ...

  8. [Go] golang-migrate/migrate 快速使用指南

    1. CLI 用途的安装 [文档] [确保] CLI 工具使用 go 命令安装时,不应该在 go.mod 所在的目录中执行命令,也就是先进入到其它非项目目录内. $ go get -tags 'pos ...

  9. DelegateCommand-最简单的合令调用。

    View代码 <StackPanel> <Button Content="方法一" Command="{Binding AddCommand}" ...

  10. WPF 应用启动过程同时启动多个 UI 线程且访问 ContentPresenter 可能让多个 UI 线程互等

    在应用启动过程里,除了主 UI 线程之外,如果还多启动了新的 UI 线程,且此新的 UI 线程碰到 ContentPresenter 类型,那么将可能存在让新的 UI 线程和主 UI 线程互等.这是多 ...