当前位置: 首页 > article >正文

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

【算法介绍】

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

SM2算法特点

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

应用场景

  • 数据加密:使用公钥加密敏感数据,确保数据在传输过程中的安全性。
  • 数字签名:通过私钥对数据进行签名,公钥进行验证,确保数据的完整性和不可抵赖性。
  • 密钥交换:在双方通信前,通过SM2算法安全地交换密钥,为后续的数据加密提供基础。

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

加密解密字符串效果:

调用代码:

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


http://www.kler.cn/a/286791.html

相关文章:

  • Vue3.5 企业级管理系统实战(三):页面布局及样式处理 (Scss UnoCSS )
  • 计算机毕业设计hadoop+spark+hive图书推荐系统 豆瓣图书数据分析可视化大屏 豆瓣图书爬虫 知识图谱 图书大数据 大数据毕业设计 机器学习
  • Linux 系统错误处理简介
  • 动态内存管理
  • MyBatis 注解开发详解
  • blender 安装笔记 linux 2025
  • 研究生深度学习入门的十天学习计划------第五天
  • 小琳python课堂:Python核心概念 类和对象
  • 折腾 Quickwit,Rust 编写的分布式搜索引擎 - 从不同的来源摄取数据
  • Django+Vue农产品销售系统的设计与实现
  • 理解大模型中的Cursor技术:优化长文本推理的前沿方案
  • 微服务集成 Seata
  • 【 html+css 绚丽Loading 】000030 灵文闪烁符
  • 【Selenium】UI自动化实践——输入验证码登录
  • Mysql基础练习题 1084.销售分析3 (力扣)
  • 数据结构--初步了解(抽象分级)
  • 【专题】2024年中国AI人工智能基础数据服务研究报告合集PDF分享(附原数据表)
  • 架构设计(13)安全架构设计理论
  • QT +ffmpeg-4.2.2-win64-shared 拉取 RTMP/http-flv 流播放
  • 模型 冯/诺依曼思维模型
  • 实习的一点回顾单元测试
  • 网络爬虫调研报告
  • Force Yc 第九引导公告页HTML源码
  • Codeforces Round 969 (Div. 2)
  • ffplay源码分析(五)包缓存队列和帧缓存队列
  • 【微服务】springboot 自定义注解+反射+aop实现动态修改请求参数