首页 > 编程语言 >C#SM4加密算法

C#SM4加密算法

时间:2024-11-06 13:49:14浏览次数:1  
标签:string C# SM4 inCipher secretKey byte 加密算法 ECB

1.管理NuGet程序包,搜索BouncyCastle,安装

2.代码示例

//加密算法:SM4
//加密模式:ECB
//填充模式:PKCS5Padding
//编码类型:UTF-8
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="plainText"></param>
        /// <param name="secretKey"></param>
        /// <returns></returns>
        public string MS4Encrypt_ECB(string plainText, string secretKey)
        {
            byte[] plaintext = Encoding.UTF8.GetBytes(plainText);
            byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);
            IBufferedCipher inCipher = CipherUtilities.GetCipher("SM4/ECB/PKCS5Padding");
            KeyParameter key = ParameterUtilities.CreateKeyParameter("SM4", keyBytes);
            inCipher.Init(true, key);
            byte[] cipher = inCipher.DoFinal(plaintext);
            //加密结果数据格式Hex
            byte[] encrypted2 = Hex.Encode(cipher);
            return Encoding.UTF8.GetString(encrypted2).ToUpper();
 
        }
/// <summary> /// 解密 /// </summary> /// <param name="cipherText"></param> /// <param name="secretKey"></param> /// <returns></returns> public string MS4Decrypt_ECB(string cipherText, string secretKey) { byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey); byte[] plaintext = Encoding.UTF8.GetBytes(cipherText); IBufferedCipher inCipher = CipherUtilities.GetCipher("SM4/ECB/PKCS5Padding"); KeyParameter key = ParameterUtilities.CreateKeyParameter("SM4", keyBytes); var cipher = Hex.Encode(plaintext); inCipher.Reset(); inCipher.Init(false, key); byte[] bin = inCipher.DoFinal(cipher); string ans = Encoding.UTF8.GetString(bin); return ans; }
// 当secretKey为Base64位字符串,使用ECB加密为Base64

         public static string MS4Encrypt_ECB(string plainText, string secretKey)
         {
                    byte[] keyBytes = Convert.FromBase64String(secretKey);
                    byte[] plaintext = Encoding.UTF8.GetBytes(plainText);
                    IBufferedCipher inCipher = CipherUtilities.GetCipher("SM4/ECB/PKCS5Padding");
                    KeyParameter key = ParameterUtilities.CreateKeyParameter("SM4", keyBytes);
                    inCipher.Init(true, key);
                    byte[] cipher = inCipher.DoFinal(plaintext);
                    return Convert.ToBase64String(cipher);

        }




在线工具:https://lzltool.cn/SM4

 

标签:string,C#,SM4,inCipher,secretKey,byte,加密算法,ECB
From: https://www.cnblogs.com/ywtssydm/p/18530023

相关文章

  • C++中的各种锁p8
    在多线程开发中,经常会遇到数据同步,很多情况下用锁都是一个很好的选择。C++中常用的锁主要有下面几种:互斥锁(std::mutex)这是最基本的一种锁。它用于保护共享资源,在任意时刻,最多只有一个线程可以获取该锁,从而访问被保护的资源。当一个线程获取了互斥锁后,其他试图获取该锁的线程会......
  • 认识鸿蒙ContextUQ
    Context是应用中对象的上下文,其提供了应用的一些基础信息,例如resourceManager(资源管理)、applicationInfo(当前应用信息)、dir(应用文件路径)、area(文件分区)等,以及应用的一些基本方法,例如createBundleContext()、getApplicationContext()等。UIAbility组件和各种ExtensionAbility派生类......
  • Anaconda基础使用
    背景Anaconda用于解决多个版本的python环境共存问题,开箱即用。本随笔只记录基础的使用命令。基础使用创建环境#pytest为环境名3.5为python的版本condacreate-npytestpython=3.5#pytest为环境名3.5为python的版本condacreate-npy39python=3.9.20#创建新......
  • 【内存泄漏和内存溢出】JavaScript之深入浅出理解内存泄漏和内存溢出
    https://blog.csdn.net/qq_44291585/article/details/122026034 内存泄漏和内存溢出了解内存泄露和内存溢出之前,我们得知道什么是内存!下面就会详细讲解什么内存什么是内存内存(Memory)是计算机的重要部件之一,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,与硬盘等外部......
  • tomcat转东方通
    目录前言登录服务器tomcat部署应用东方通部署东方通配置启动参数配置-JVM参数启动参数配置-服务器参数WEB容器配置-虚拟主机管理WEB容器配置-HTTP通道管理东方通密码重置前言本文简要Linux环境介绍tomcat部署的服务,换成中间件是东方通之后如何部署。登录服务器不......
  • 深入理解JavaScript中的闭包
    写在前面在JavaScript中,闭包是一个强大的概念,它允许我们创建私有变量和函数,并在需要时访问它们。虽然闭包可能看起来有些神秘,但实际上它是基于JavaScript的词法作用域和函数的特性。理解闭包对于编写高效、可维护的JavaScript代码至关重要。什么是闭包?闭包是指一个函数能......
  • Scala的抽象类
    抽象类:是一个不能被实例化的类。      !不可以直接创建对象,而是通过子类创建对象。 关键字:abstract   语法:abstractclassA{}举例://定义抽象类:定义标准//抽象类是一个特殊的类,它至少包含一个抽象方法//抽象方法:没有方法体,只有def和方法名abstra......
  • 刘艳兵-DBA024-关于oracle实例说法正确的是?
    关于oracle实例说法正确的是?A   ORACLE_SID和实例名可以相同,也可以不同B   使用pfile参数文件启动实例时,至少要配置两个参数C   oracle在同一个$ORACLE_HOME下,可以有两个同名的实例D   实例名和数据库名必须相同答:A   ORACLE_SID和实例名可以相同,也......
  • 在 Windows Server 2025 中,WebDAV 重定向程序(WebDAV Redirector)是一个客户端组件,用于
    在WindowsServer2025和更高版本中,WebDAV(Web-basedDistributedAuthoringandVersioning)协议仍然可以通过启用IIS(InternetInformationServices)角色来使用。你可以安装并配置IIS中的WebDAV模块来实现文件共享和远程访问。在WindowsServer2025中,WebDAV重定向程序......
  • AC自动机
    板子题.AC自动机的建立(指针版本,数组版本附在注释后面)constintM=26,N=1010000,mod=1e9+7;structnode{ node*son[M],*go[M],*fail;//go[i]表示当前节点位置匹配i时,最终会跳到哪个节点才能匹配成功,fail就类似于KMP的next数组}pool[N],*cur=pool,*root,*d[210];//cur......