• 如何实现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;
    }

    }
    }

     

  • 相关阅读:
    七夕玫瑰花合集
    linux部署tomcat项目详细教程(安装linux到部署tomcat)
    Sqlmap(SQL注入自动化工具)
    花好月圆时,邀你一起来读诗!
    centos上安装rabbitmq
    案例图解:某投资集团企业主数据项目实践分享
    Python技法:实用运维脚本编写(进程/文件/目录操作)
    【Unity】安卓加密编译libmono.so失败记录(做个记录呗)
    Vue3+elementplus搭建通用管理系统实例三:登录流程实现
    5 运算符、表达式和语句
  • 原文地址:https://www.cnblogs.com/nacheng/p/18229305