如何实现sm3加密

sm3 · 浏览次数 : 0

小编点评

**SM3加密应用** SM3是一种中国国家标准的密码杂凑函数,用于数据完整性校验和签名验证等领域。 **C#中实现SM3加密** 可以使用第三方库,例如BouncyCastle库,来实现SM3加密。 **步骤:** 1. **安装BouncyCastle库:**使用NuGet包管理器安装BouncyCastle库。 2. **创建SM3摘要实例:**使用`SM3Digest`类创建SM3摘要实例。 3. **将输入字符串转换为字节数组:**使用`Encoding.UTF8.GetBytes()`将字符串转换为字节数组。 4. **更新摘要数据:**使用`BlockUpdate()`方法更新摘要数据。 5. **获取摘要大小并创建一个足够大的字节数组:**使用`GetDigestSize()`方法获取摘要大小,并创建一个足够大的字节数组来存储哈希值。 6. **完成哈希计算并将结果存储在hash数组中:**使用`DoFinal()`方法完成哈希计算并将结果存储在hash数组中。 7. **将哈希值转换为十六进制字符串并返回:**使用`ConvertToHexString()`方法将哈希值转换为十六进制字符串并返回。 **示例:** ```csharp // 生成SM3哈希值 string input = "hello world"; string sm3Hash = SM3Help.GenerateSm3Hash(input); // 打印SM3哈希值 Console.WriteLine("SM3哈希值:{0}", sm3Hash); ``` **注意:** * SM3的输出长度为256位(32字节)。 * SM3是一种杂凑函数,不是加密算法,用于生成固定长度的散列值,而不是加密数据以供后续解密。

正文

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加密相似的内容:

如何实现sm3加密

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

如何实现一个简单易用的 RocketMQ SDK

2018 年,做为架构负责人,接到一个架构需求:实现一个简单易用的 RocketMQ SDK 。 因为各个团队 RocketMQ 原生客户端配置起来千奇百怪,有的配置存在风险,各团队负责人都需要一个简洁易用的 RocketMQ SDK 。 我立马调研相关开源的方案,当时 RocketMQ-Sprin

如何实现一个优秀的 HashTable 散列表?

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 在前几篇文章里,我们聊到了 Java 中的几种线性表结构,包括 ArrayList、LinkedList、ArrayDeque 等。今天,我们来讨论另一种常用的基础数据结构,同时也是

如何实现巡检报告?

# 什么是巡检报告 巡检报告是指对某一个系统或设备进行全面检查,并把检查结果及建议整理成报告的过程。 巡检报告通常用于评估系统或设备的运行状况与性能,以发现问题、优化系统、提高效率、降低故障率等方面提供参考。 ![file](https://img2023.cnblogs.com/other/233

如何实现在react现有项目中嵌入Blazor?

如何实现在react现有项目中嵌入Blazor? 目前官方只提供了angular和react俩种示例所以本教程只讲react教程 思路讲解: 首先在现有react项目中我们可能某些组件是在Blazor中完成,但是我们没办法找到怎么在react中轻量级使用blazor组件,可能会有人会使用iframe

如何实现一个SQL解析器

本篇文章主要介绍如何实现一个SQL解析器来应用的业务当中,同时结合具体的案例来介绍SQL解析器的实践过程。

如何实现Excel中的多级数据联动

> 摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:[葡萄城官网](https://www.grapecity.com.cn/),葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 ## 前言 在类Excel表格应用中,常用的需求场景是根据单元格之间的数据联动,例如选择某个

PPT 图片8大操作技巧

如何实现图片的批量导入 插入相册 图片批量导出 7z 直接解压 修改扩展名 -> 解压 PPT 抠图 设备透明色 删除背景色 二次曝光效果 低版本 office 通过,形状来实现 图片融入背景 半透明渐变 图片上插入形状,背景渐变填充,全选白的,调整渐变光圈的透明度 调整logo颜色 右击图片格式

如何实现 Java SpringBoot 自动验证入参数据的有效性

Java SpringBoot 通过javax.validation.constraints下的注解,实现入参数据自动验证 如果碰到 `@NotEmpty` 否则不生效,注意看下 `@RequestBody` 前面是否加上了`@Valid`

如何实现千万级优惠文章的优惠信息同步

金融社区优惠文章是基于京东商城优惠商品批量化自动生成的,每日通过不同的渠道获取到待生成的SKU列表,并根据条件生成优惠文章。 但是,生成优惠文章之后续衍生问题:该商品无优惠了,对应文章需要做取消推荐或下架处理,怎样能更快的知道该商品无优惠了呢?