首页 > 其他分享 >如何实现sm3加密

如何实现sm3加密

时间:2024-06-03 17:36:03浏览次数:13  
标签:加密 inputBytes SM3 sm3 如何 算法 byte digest

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;
}

}
}

 

标签:加密,inputBytes,SM3,sm3,如何,算法,byte,digest
From: https://www.cnblogs.com/nacheng/p/18229305

相关文章

  • Python基础:在多个.py文件组成的项目中如何安全的使用文件路径(绝对路径安全,相对路径可
    在Python项目中使用相对路径时,路径的计算是基于当前执行脚本的位置,即当前工作目录(CurrentWorkingDirectory,CWD)。这通常是你从中启动Python解释器的目录。这种方式在简单脚本或当你直接从命令行运行单个脚本文件时行得通,但在较大的项目或多层目录结构中可能导致路径错误......
  • 在MySQL中,你可以使用动态SQL和存储过程来根据元数据表查询多个表,并将结果集合并。以下
    DELIMITER$$CREATEPROCEDUREMergeDataFromTables()BEGIN--游标声明DECLAREdoneINTDEFAULTFALSE;DECLAREtbl_nameVARCHAR(255);DECLAREcurCURSORFORSELECT表明FROMtable_col;DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=TRU......
  • 如何编写Dockerfile
    例如,要基于Ubuntu镜像来构建一个Java应用,其Dockerfile内容如下:#指定基础镜像FROMubuntu:16.04#配置环境变量,JDK的安装目录、容器内时区ENVJAVA_DIR=/usr/localENVTZ=Asia/Shanghai#拷贝jdk和java项目的包COPY./jdk8.tar.gz$JAVA_DIR/COPY./docker-demo.jar/tmp......
  • 大数量情况下如何快速从会员登录数据中筛选出5天内连续3天登录的会员
    库表user_login_log表中核心字段:user_id、login_date处理方式:1、大数据处理【数据人员】:通常情况下会把user_login_log表同步到大数据平台,又由数据同事进行处理“5天内连续3天登录的会员”数据,再由大数据平台同步到业务库表。2、定时任务轮训【服务端人员】:轮......
  • 拼多多面试:Netty如何解决粘包问题?
    粘包和拆包问题也叫做粘包和半包问题,它是指在数据传输时,接收方未能正常读取到一条完整数据的情况(只读取了部分数据,或多读取到了另一条数据的情况)就叫做粘包或拆包问题。从严格意义上来说,粘包问题和拆包问题属于两个不同的问题,接下来我们分别来看。1.粘包问题粘包问题是指在网络......
  • 如何去除PDF限制编辑的密码保护?
    PDF文件因其跨平台兼容性和良好的文档格式保持能力,成为商务、学习和日常工作中不可或缺的文件格式。然而,为了保护文件不被随意修改,许多PDF文件都设置了密码保护,特别是编辑权限的限制。本文将详细介绍如何去除pdf密码保护的编辑,特别是编辑权限的限制,以便用户能够自由编辑和修改文件......
  • 四种加密模式
    四种加密模式一.ECB(ElectronicCodeBook)/电码本模式​​ECB模式简单,针对各个明文分组使用同一套密钥独立进行加密,得到密文,可以实现并行加密,但是可能出现密文重复,安全性差。二.CBC(CipherBlockChaining)/密文分组链接模式​​CBC模式加密模式是明文在会与一个向量进行......
  • 大数据信用报告多久查一次比较合适?如何选择查询平台?
    大数据信用在当今提及的频率比较高,同样的也越来越受重视,不少人都在积极的了解自己的大数据信用情况,那大数据信用报告多久查一次比较合适呢?接下来本文带大家从几个方面了解一下,一起去看看吧。从应用场景方面分析:一、风险自测半年一次比较好大家都知道大数......
  • Facebook企业广告账户/如何开户?
     还没接触过facebook广告营销的卖家可能会担心开户费用很高?其实不然,那么小编来给您介绍一下开户需要准备一些什么东西?代理商一般是如何收费的呢?Facebook,Google开企业广告账户/游戏代投1、通过Facebook国内的服务商所开通的国内Facebook企业广告账户是不需要开户费的2......
  • PsShutdown 工具的基本用法和操作流程,帮助他们在远程管理中更方便地实现计算机的关机
    PsShutdown是PSTools工具集中的一款工具,用于远程关闭或重启计算机。以下是PsShutdown工具的初级应用大纲示例:PsShutdown初级应用大纲工具介绍简要介绍PsShutdown工具的作用和功能,以及如何使用它来远程关闭或重启计算机。安装与配置指导用户如何下载、安装和......