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

2024-09-02 10:20

本文主要是介绍[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

这篇关于[C#]国密SM2算法加解密字符串加密解密文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129697

相关文章

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程