首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C#]国密SM2算法加解密字符串加密解密文件

[C#]国密SM2算法加解密字符串加密解密文件

作者头像
云未归来
发布2025-07-21 13:31:10
发布2025-07-21 13:31:10
26300
代码可运行
举报
运行总次数:0
代码可运行

【算法介绍】

国密SM2算法是一种由中国国家密码管理局发布的非对称加密算法,基于椭圆曲线密码学体系,具有较高的安全性和效率。该算法主要用于数字签名、密钥交换和公钥加密等场景,其安全性主要基于椭圆曲线离散对数问题的难解性。

SM2算法特点
  1. 高安全性:SM2算法基于椭圆曲线密码学,相比传统算法如RSA,在同等密钥长度下提供了更高的安全性。
  2. 高效率:SM2算法的计算量相对较小,适合在资源受限的环境中使用,如移动设备或嵌入式系统。
  3. 广泛适用性:不仅适用于数据加密,还广泛应用于数字签名、密钥协商等场景,满足多种信息安全需求。
  4. 标准化:SM2算法已被国际电信联盟(ITU-T)和国际标准化组织(ISO)认可为国际标准,体现了其国际认可度和影响力。
应用场景
  • 数据加密:使用公钥加密敏感数据,确保数据在传输过程中的安全性。
  • 数字签名:通过私钥对数据进行签名,公钥进行验证,确保数据的完整性和不可抵赖性。
  • 密钥交换:在双方通信前,通过SM2算法安全地交换密钥,为后续的数据加密提供基础。

总之,SM2算法以其高安全性、高效率和广泛适用性,在信息安全领域发挥着重要作用。

加密解密字符串效果:

调用代码:

代码语言:javascript
代码运行次数:0
运行
复制
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Math.EC;
using Org.BouncyCastle.Utilities.Encoders;
using SM2Crypto.Lib;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SM2Crypto
{
    class Program
    {
    private static  string PubKey= "041E353292615666BB47F6358D3E893394D34AF30D64875E2E422182C15885D3ECA697C345EED99268D3CAC5F6054780C34433E1BF12EBFF1F744B67A2F6863CFB";
    private static  string PriKey = "00FAB34B54C026D158B54C88BC0463CB79B22661C7C870AD2A0455300E05471CE1";

    // 报送文件加密用公钥1 测试阶段无需修改,生产接入时另行发放
     public static readonly string PUB_X_KEY = "dc5f89775f11266dbb166638710463db31a91f7b3061aeddb69444d5ec748929";
	// 报送文件加密用公钥2 测试阶段无需修改,生产接入时另行发放
	public static readonly string PUB_Y_KEY = "740e50cb6e6e04003029a66920d1ba4bc39519035ea423bf0079ef58128202fb";
	// 反馈文件解密用私钥 测试阶段无需修改,生产接入时另行发放
	public static readonly string PRV_KEY = "9401d5a563967f8bd39fbd81d5dedea4e552bf97f5dd8cab95749421a477e7d0";

        static void Main(string[] args)
        {

            //byte a = 149;
            //var a1 = Hex.Encode(new byte[] { a });
            //var b = Hex.Decode(a1);

            ////生成公钥私钥对
            // GetKeyPair();

            //字符串加密与解密
            TestSm2Enc();
            //加密文件
            //EncryptFile();

            //解密文件
            //DecryptFile();

            Console.WriteLine("all done");
            Console.ReadKey();
        }
        /// <summary>
        /// 这个是演示生成公钥和私钥例子
        /// </summary>
        public static void GetKeyPair()
        {
            SM2Utils sm2Utils = new SM2Utils();
            ECPoint pubk;
            BigInteger prik;
            SM2Utils.GenerateKeyPair( out pubk,  out prik);
            var PubKey = Encoding.ASCII.GetString(Hex.Encode(pubk.GetEncoded())).ToUpper();
            var PriKey = Encoding.ASCII.GetString(Hex.Encode(prik.ToByteArray())).ToUpper();
            System.Console.Out.WriteLine("公钥: " + PubKey);
            System.Console.Out.WriteLine("私钥: " + PriKey);
        }

【完整演示源码下载地址】https://download.csdn.net/download/FL1623863129/88600454

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SM2算法特点
  • 应用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档