如何实现sm3加密
SM3加密应用
何为sm3加密?
SM3是由中国国家密码管理局设计的一种密码杂凑函数,类似于SHA-256和MD5等国际标准的散列算法。SM3算法是中国国家标准《GB/T 32905-2016 信息安全技术 SM3密码杂凑算法》的一部分,用于数字签名和数据完整性验证等领域。
SM3算法的特点
- 输出长度:SM3算法的输出散列值长度为256位(32字节)。
- 安全性:SM3设计上具有较高的安全性,抵御已知的各种攻击,如碰撞攻击和长度扩展攻击等。
- 性能: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加密的更多相关文章
- java sm3加密算法
java sm3加密算法实现 CreationTime--2018年7月13日09点28分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59.ja ...
- go-dongle 0.2.0 版本发布了,一个轻量级、语义化的 golang 编码解码、加密解密库
dongle 是一个轻量级.语义化.对开发者友好的 Golang 编码解码和加密解密库 Dongle 已被 awesome-go 收录, 如果您觉得不错,请给个 star 吧 github.com/g ...
- 《基于Arm实验箱的国密算法应用》课程设计 结题报告
<基于Arm实验箱的国密算法应用>课程设计 结题报告 小组成员姓名:20155206赵飞 20155220吴思其 20155234昝昕明 指导教师:娄嘉鹏 设计方案 题目要求:基于Arm实 ...
- 2015520吴思其 基于《Arm试验箱的国密算法应用》课程设计个人报告
20155200吴思其 基于<Arm试验箱的国密算法应用>课程设计个人报告 课程设计中承担的任务 完成试验箱测试功能4,5,6以及SM3加密实验的实现 测试四 GPIO0按键中断实验 实验 ...
- WebService之Spring+CXF整合示例
一.Spring+CXF整合示例 WebService是一种跨编程语言.跨操作系统平台的远程调用技术,它是指一个应用程序向外界暴露一个能通过Web调用的API接口,我们把调用这个WebService的 ...
- gmlib密码算法库
gmlib密码算法库 一.gmlib密码算法库简介 支持国密 SM4/AES-ECB/CBC/GCM,SM3,SM2签名/加密,ZUC算法 的密码库,文档页面GMLib Docs ,项目地址 gmli ...
- crypto-gmsm国密算法库
crypto-gmsm国密算法库 一.开发背景 crypto-gmsm国密算法库是国密商密算法(SM2,SM3,SM4)工具类封装,国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主 ...
- sm-crypto密码算法库
一.环境配置 在之前的node.js库配置中,我们已经配置好了node和npm,再次检查配置情况 node -v npm -v npm install --save miniprogram-sm-cr ...
- AES SHA-1 SM3 MD5
AES是美国国家标准技术研究所NIST旨在代替DES的21世纪的加密标准. 输入:128bit 的消息分组 输出:128bit 的密文分组 密钥长度及圈数 128 10 192 12 256 14 消 ...
- SM3杂凑算法Python语言实现——第三部分
SM3杂凑算法实现--第三部分 一.SM3 密码概述 我们首先把需要用到的算法呈现出来,最后我们再考虑如何集合为一个库的方法,这一部分我们就开始编写一个新的算法:国家商用密码标准SM3密 ...
随机推荐
- 我们为什么需要操作系统(Operating System)?
我们为什么需要操作系统(Operating System)? a) 从计算机体系的角度,OS向下统筹了所有硬件资源(1),向上为所有软件提供API调用(2),使得软件程序员不必知晓硬件的具体细节,实现 ...
- C#的基于.net framework的Dll模块编程(一) - 编程手把手系列文章
从此博文开始分几篇介绍C#的开发.这次讲讲C#的.net framework的Dll文件类库模块的编程方法. 对于Windows来说,要运行应用程序要基于Dll类库和Exe执行文件.对于笔者来说,模块 ...
- 力扣601(MySQL)-体育馆的人的流量(困难)
题目: 表:Stadium 编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录. 返回按 visit_date 升序排列 的结果表. 查询结果格式如下所示 示例 ...
- Flutter+FaaS一体化任务编排的思考与设计
作者:闲鱼技术-古风 Flutter+Serverless三端一体研发架构,客户端不仅仅是编写双端的代码,而是扩展了客户端的工作边界,形成完整的业务闭环.在新的研发模式落地与实践的过程中,一直在思考如 ...
- 最佳实践|Spring Boot 应用如何快速接入 Prometheus 监控
简介:SpringBoot 微服务的开发.发布与部署只占其生命周期的一小部分,应用和系统运维才是重中之重.而运维过程中,监控工作更是占据重要位置.那么,为了对系统的状态进行持续地观测,面向Sprin ...
- 什么是好的错误消息? 讨论一下Java系统中的错误码设计
简介:一个好的Error Message主要包含三个部分:Context: 什么导致了错误?发生错误的时候代码想做什么?The error itself: 到底是什么导致了失败?具体的原因和当时的数据 ...
- 官宣|Apache Flink 1.13.0 正式发布,流处理应用更加简单高效!
简介: Flink 1.13.0 版本让流处理应用的使用像普通应用一样简单和自然,并且让用户可以更好地理解流作业的性能. 翻译 | 高赟Review | 朱翥.马国维 Flink 1.13 发布了! ...
- Ubuntu 通过本机代理修复 NuGet 还原 error NU1301 失败
在国内垃圾的网络环境下,我在虚拟机里面安装了 Ubuntu 系统,准备用来测试 MAUI 在 Linux 上的行为,然而使用 dotnet restore 构建时,提示 NU1301 失败.我通过配置 ...
- 什么是SQL 语句中相关子查询与非相关子查询
1.什么是SQL子查询 要理解相关子查询和非相关子查询,我们得首先理解什么是子查询,子查询是指在一个查询语句中嵌套的另一个查询语句. 子查询可以嵌套在其他查询语句中,如 SELECT.INSERT.U ...
- C++ Grammar Focus
一.结构体 1.基础模板 struct Node { <变量类型1> 变量名1; <变量类型2> 变量名2; ... } <定义变量名1>,<定义变量名2&g ...