C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密

这篇具有很好参考价值的文章主要介绍了C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密,为了演示方便本问使用的是Visual Studio 2022 来构建代码的

1、新建项目,之后选择 项目 鼠标右键选择  管理NuGet程序包管理,输入  BouncyCastle 回车 添加BouncyCastle程序包

C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密,工具,c#,开发语言,国密加密解密,国密SM4加密解密

2、代码如下:CBC模式

                        byte[] plaintext = Encoding.UTF8.GetBytes("1234567890国abcdefghijklmnopqrstuvwxyz");
                        byte[] keyBytes = Encoding.UTF8.GetBytes("1234567890123456");
                        byte[] iv = Encoding.UTF8.GetBytes("0123456789ABCDEF");
                        // SM4/CBC加密
                        KeyParameter key = ParameterUtilities.CreateKeyParameter("SM4", keyBytes);
                        ParametersWithIV keyParamWithIv = new ParametersWithIV(key, iv);

                        IBufferedCipher inCipher = CipherUtilities.GetCipher("SM4/CBC/PKCS7Padding");
                        inCipher.Init(true, keyParamWithIv);
                        byte[] cipher = inCipher.DoFinal(plaintext);
                        //Console.WriteLine("加密后的密文(hex): {0}", BitConverter.ToString(cipher, 0).Replace("-", string.Empty));
                        rtbCard.Text = $"加密后的密文: {Convert.ToBase64String(cipher).Replace("-", string.Empty)}";

                        // SM4/CBC解密
                        inCipher.Reset();
                        inCipher.Init(false, key);
                        byte[] bin = inCipher.DoFinal(cipher);
                        string ans = Encoding.UTF8.GetString(bin);
                        //Console.WriteLine("解密后的密文(hex): {0}", Convert.ToBase64String(cipher).Replace("-", string.Empty));
                        //Console.WriteLine("解密明文内容:  {0}\t是否匹配: {1}", ans, Enumerable.SequenceEqual(plaintext, bin));

                        rtbCard.Text = rtbCard.Text + "\r\n" + $"解密明文内容:  {ans}\t是否匹配: {Enumerable.SequenceEqual(plaintext, bin)}";

代码如下:ECB模式

 byte[] plaintext = Encoding.UTF8.GetBytes("1234567890国abcdefghijklmnopqrstuvwxyz");
                        byte[] keyBytes = Encoding.UTF8.GetBytes("1234567890123456");
                        byte[] iv = Encoding.UTF8.GetBytes("0123456789ABCDEF");
                        // SM4/ECB加密
                        KeyParameter key = ParameterUtilities.CreateKeyParameter("SM4", keyBytes);
                        //ParametersWithIV keyParamWithIv = new ParametersWithIV(key, iv);
                        ParametersWithIV keyParamWithIv = new ParametersWithIV(key, iv);

                        //IBufferedCipher inCipher = CipherUtilities.GetCipher("SM4/CBC/PKCS7Padding");
                        IBufferedCipher inCipher = CipherUtilities.GetCipher("SM4/ECB/PKCS7Padding");
                        //inCipher.Init(true, keyParamWithIv);
                        inCipher.Init(true, key);
                        byte[] cipher = inCipher.DoFinal(plaintext);
                        //Console.WriteLine("加密后的密文(hex): {0}", BitConverter.ToString(cipher, 0).Replace("-", string.Empty));
                        rtbCard.Text = $"加密后的密文: {Convert.ToBase64String(cipher).Replace("-", string.Empty)}";

                        // SM4/ECB解密
                        inCipher.Reset();
                        //inCipher.Init(false, keyParamWithIv);
                        inCipher.Init(false, key);
                        byte[] bin = inCipher.DoFinal(cipher);
                        string ans = Encoding.UTF8.GetString(bin);
                        Console.WriteLine("解密后的密文(hex): {0}", Convert.ToBase64String(cipher).Replace("-", string.Empty));
                        Console.WriteLine("解密明文内容:  {0}\t是否匹配: {1}", ans, Enumerable.SequenceEqual(plaintext, bin));

                        rtbCard.Text = rtbCard.Text + "\r\n" + $"解密明文内容:  {ans}\t是否匹配: {Enumerable.SequenceEqual(plaintext, bin)}"; 

3、运行

C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密,工具,c#,开发语言,国密加密解密,国密SM4加密解密

4、SM4密码算法是一个分组算法。数据分组长度为128比特,密钥长度为128 比特。加密算法采用32 轮迭代结构,每轮使用一个轮密钥。我们在实现可用data字节的形式,即秘钥Data为16位,加密数据Data需为16的整数倍,这两点很重要。

1、ECB模式

观察第一块,和第三块,皆为明文块0,相同的输入产生相同的输出

C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密,工具,c#,开发语言,国密加密解密,国密SM4加密解密

 2、CBC模式

CBC(密文分组链接方式),它的实现机制使加密的各段数据之间有了联系。

也是按照data 16位来分组,第一组数据与初始化向量IV异或后的结果进行加密,密得到第一组密文C1(初始化向量I为全零),第二组数据与第一组的加密结果C1异或以后的结果进行加密,得到第二组密文C2...... 最后C1C2C3......Cn即为加密结果。此种方法安全性高,但是不利于并行计算,有误差传递,需要初始化向量IV。

C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密,工具,c#,开发语言,国密加密解密,国密SM4加密解密

 参考链接:国密sm4 ECB、CEC模式探究与在iOS中的应用_sm4 ecb_落尘修竹的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-676469.html

到了这里,关于C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue前端国密SM2, SM4 算法实现

    整体加密逻辑是,首先生成16位key值 用SM2 公钥加密该key值,后端用sm2私钥 解密出key值,然后采用sm4方法根据key值对返回值进行加密,前端采用sm4 对后端返回结果进行解密进行前端展示 目前主要常用的国密算法有sm-crypto,gm-crypto,gm-crypt(SM4) 1、安装 sm-crypto 2、包装加解密

    2024年02月12日
    浏览(48)
  • SpringBoot实现国密SM4加密、解密

    SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。 在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算

    2024年02月07日
    浏览(63)
  • Go实现国密算法SM2、SM3、SM4

    SM2椭圆曲线公钥密码算法 Public key cryptographic algorithm SM2 based on elliptic curves 遵循的SM2标准号为: GM/T 0003.1-2012、GM/T 0003.2-2012、GM/T 0003.3-2012、GM/T 0003.4-2012、GM/T 0003.5-2012、GM/T 0009-2012、GM/T 0010-2012 依赖包: github.com/tjfoc/gmsm/sm2 SM3密码杂凑算法 - SM3 cryptographic hash algorithm 遵循的SM

    2024年02月15日
    浏览(48)
  • 国密算法 SM4加密算法 Python完整实现

    SM4算法是一种 对称加密算法 ,也被称为国密算法。它是由中国密码学家设计的,已被列入国家密码局的标准。 SM4算法使用 128位的密钥和分组大小 ,使用 32轮迭代 加密,可以用于加密数据和验证消息认证码。它的加密效率很高,安全性也很好,被广泛应用于各种安全领域,

    2024年02月11日
    浏览(52)
  • java实现国密SM4的加密和解密方式(即时通讯的消息对话加密采用SM2还是SM4)

    1.对于即时通讯的消息对话加密采用SM2还是SM4更合适? 对于即时通讯的消息对话加密,建议采用SM4对称加密算法,而不是SM2非对称加密算法。 SM2主要用于数字签名和密钥交换,其加密速度比SM4慢,而且SM2不太适合对长消息进行加密,因为它只能对比较短的数据块进行加密,这

    2024年02月07日
    浏览(82)
  • JAVA -SM4 ECB加密

    前言:根据网络安全法要求,现在对数据存储、口令安全要求越来越严格,对技术人员编码规范要求愈加严苛,推出国密算法等政策要求 sm4-ecm举例说明 第一步引入包提示错误 第二步:pom.xml依赖如下 说明如下: BouncyCastle是一个开源的第三方算法提供商。 BouncyCastle提供了很多

    2024年02月16日
    浏览(31)
  • 国密算法SM2,SM3,SM4-java实现原理

    SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,基于ECC。其签名速度与秘钥生成速度都快于RSA,非对称加密,该算法已公开 SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。SM3主要用数字签名及验证、消息认

    2024年02月13日
    浏览(39)
  • Python实现国家商用密码算法sm2/sm3/sm4/sm9(国密)

    2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,这其中就包括 SM1、SM2、SM3 、SM4、SM7、SM9、ZUC(祖冲之加密算法)等,SM 代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。SM1 和 SM7 的算法不公开,其余算法都已成为 ISO/IEC

    2024年02月15日
    浏览(48)
  • 国密算法 SM4 对称加密 分组密码 python实现完整代码

    目前,python实现的国密算法库主要是 python-gmssl 库和 snowland-smx ( pysmx )库,二者都对SM2(仅公钥加解密和数字签名)、SM3、SM4进行了细致而优雅的实现。 GMSSL. https://github.com/duanhongyi/gmssl snowland-smx. https://gitee.com/snowlandltd/ snowland-smx-python PyCryptodome. https://www.pycryptodome.org 最近用

    2024年02月06日
    浏览(53)
  • java运用SM4国密算法对文件的加密与解密的实现

    首先我们在idae开发工具导入导入pom.xml的两个必要依赖  jar包下载地址:百度网盘 请输入提取码   npn8  图上systemPath 为jar包的文件路径,我们需要使用以下的路径存储jar包。(也可以自己设置) java包的文件路径如图所示 然后创建所需要加密的文件 ,需要加密的文件内容,

    2024年03月27日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包