标准号:GM/T 0009-2023 标准名称:SM2密码算法使用规范 发布日期:2023-12-04 实施日期:2024-06-01 代替标准:GM/T 0009-2012 本文件定义了SM2密码算法的使用方法,也定义了相关的数据格式。 SM2密码算法是一种椭圆曲线密码体系,是中国自主研发的加密算法,被广泛应用于商用密码领域。SM2算法主要包括密钥生成、加解密、数字签名和验证签名等操作。本规范详细描述了如何使用SM2算法,包括算法的基本原理、密钥管理、数据加密与解密流程、数字签名的生成和验证,以及数据格式等关键环节。 在密钥管理方面,SM2规范规定了密钥的生成、存储、更新和销毁等全过程的管理方法,确保使用过程中的安全性。数据加密和解密流程是指使用SM2算法对数据进行加密和解密的步骤和方法。数字签名的生成和验证是指通过SM2算法保证数据完整性和身份认证的过程。 数据格式部分则详细说明了在使用SM2算法进行数据交换时,各种数据对象的具体表示方式,包括密钥、签名、加密数据等的格式。例如,在数字签名中,数据的表示格式需要符合规范要求,以便在不同的系统和应用之间进行正确地传输和验证。 本规范的发布意味着对于采用SM2算法的软件和硬件产品,都必须遵循最新的规范要求,以确保其安全性和合规性。这对于保护国家商用密码产品的安全有着至关重要的意义。同时,随着该规范的实施,现有的SM2算法应用也将逐步淘汰旧标准,以新标准统一行业内的使用规范。 本规范的实施日期为2024年6月1日,距离发布日期有充分的时间让各相关企业做好准备,对现有系统进行升级和改造,以满足新规范的要求。而代替标准GM/T 0009-2012的更新也表明了密码技术的不断发展和更新,随着密码学研究的深入和技术的进步,SM2算法将被不断完善和优化,以适应新的安全需求。 随着信息技术的迅速发展和网络空间安全形势的日益严峻,密码算法在信息保护中的作用愈发重要。SM2密码算法使用规范的推出,体现了我国在商用密码领域持续自主创新的决心,也为提高我国信息安全防护水平提供了有力的技术支持。通过该规范的实施,可以进一步推广和强化SM2算法在金融、电信、电力等关键信息基础设施领域的应用,保障国家和用户的数据安全。
2025-05-19 10:40:32 1.01MB
1
国密算法计算工具,实现了SM2非对称加解密、签名验签;SM4对称加解密、SM3摘要算法,随机数获取、数据格式转换等功能。
2025-04-25 15:01:23 33.75MB 国密算法
1
国家医保SM2、SM4测试工具,包函JAVA、C#两套SM2、SM3、SM4源码。
2025-04-07 23:04:45 75.48MB 测试工具
1
C++是一种广泛使用的编程语言,它是由Bjarne Stroustrup于1979年在新泽西州美利山贝尔实验室开始设计开发的。C++是C语言的扩展,旨在提供更强大的编程能力,包括面向对象编程和泛型编程的支持。C++支持数据封装、继承和多态等面向对象编程的特性和泛型编程的模板,以及丰富的标准库,提供了大量的数据结构和算法,极大地提高了开发效率。12 C++是一种静态类型的、编译式的、通用的、大小写敏感的编程语言,它综合了高级语言和低级语言的特点。C++的语法与C语言非常相似,但增加了许多面向对象编程的特性,如类、对象、封装、继承和多态等。这使得C++既保持了C语言的低级特性,如直接访问硬件的能力,又提供了高级语言的特性,如数据封装和代码重用。13 C++的应用领域非常广泛,包括但不限于教育、系统开发、游戏开发、嵌入式系统、工业和商业应用、科研和高性能计算等领域。在教育领域,C++因其结构化和面向对象的特性,常被选为计算机科学和工程专业的入门编程语言。在系统开发领域,C++因其高效性和灵活性,经常被作为开发语言。游戏开发领域中,C++由于其高效性和广泛应用,在开发高性能游戏和游戏引擎中扮演着重要角色。在嵌入式系统领域,C++的高效和灵活性使其成为理想选择。此外,C++还广泛应用于桌面应用、Web浏览器、操作系统、编译器、媒体应用程序、数据库引擎、医疗工程和机器人等领域。16 学习C++的关键是理解其核心概念和编程风格,而不是过于深入技术细节。C++支持多种编程风格,每种风格都能有效地保证运行时间效率和空间效率。因此,无论是初学者还是经验丰富的程序员,都可以通过C++来设计和实现新系统或维护旧系统。3
2024-11-04 09:59:15 12KB
1
在IT行业中,安全是至关重要的一个领域,尤其是在网络通信和数据传输中。C#和Java作为两种广泛应用的编程语言,经常被用来实现安全相关的功能,如加密、解密、签名和验签。本文将深入探讨C# SM2算法的加密解密及签名验签过程,并结合Java的兼容性进行讲解。 SM2算法是一种基于椭圆曲线密码学(ECC)的公钥密码算法,由中国商用密码行业协会提出,主要用于确保数据的安全性和完整性。它包含了对称加密、非对称加密、数字签名等功能,特别适合于移动设备和物联网设备,因为ECC在处理效率和安全性上都优于传统的RSA等算法。 在C#中实现SM2加密和解密,首先需要引入相应的库,如Bouncy Castle,这是一个广泛支持各种加密算法的开源库。在项目中添加引用后,可以创建SM2的公钥和私钥对,然后使用这些密钥进行数据的加解密操作。代码示例如下: ```csharp using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Parameters; // 生成密钥对 var keyPairGenerator = KeyPairGenerator.Instance("EC", "BC"); keyPairGenerator.Init(new ECKeyGenerationParameters(ECCurve.CreateFromValue("sm2p256v1"), new SecureRandom())); var keyPair = keyPairGenerator.GenerateKeyPair(); var publicKey = (ECPublicKeyParameters)keyPair.Public; var privateKey = (ECPrivateKeyParameters)keyPair.Private; // 加密 var cipher = CipherUtilities.GetCipher("ECIES"); var parameters = new ECDHCBasisParameters(publicKey.Parameters.Curve, publicKey.Parameters.G, publicKey.Parameters.Order); cipher.Init(true, new ParametersWithIV(new Pkcs1Encoding(new ECDHBasicAgreement()), IV)); var encryptedBytes = cipher.DoFinal(plaintext); // 解密 cipher.Init(false, privateKey); var decryptedBytes = cipher.DoFinal(encryptedBytes); ``` 签名和验签是保证数据完整性的关键步骤。在C#中,SM2签名和验签的实现如下: ```csharp // 签名 var signer = SignerUtilities.GetSigner("SM3withSM2"); signer.Init(true, privateKey); signer.Update(plaintext, 0, plaintext.Length); var signature = signer.GenerateSignature(); // 验签 signer.Init(false, publicKey); signer.Update(plaintext, 0, plaintext.Length); var isVerified = signer.VerifySignature(signature); ``` 在实际应用中,可能需要C#与Java之间的互操作,即Java应用能够处理由C#生成的加密或签名的数据,反之亦然。这需要两者的实现遵循相同的规范和标准。幸运的是,SM2算法在Java中也有相应的实现,如通过Bouncy Castle库。只要确保C#和Java使用的曲线参数、编码方式等一致,就可以实现跨平台的数据安全交换。 在"TEST"这个压缩包文件中,可能包含了一个C#实现的SM2加密解密和签名验签的Demo项目,以及与Java联调的相关示例代码。通过这些示例,开发者可以学习如何在实际项目中运用SM2算法,确保数据在C#和Java应用之间的安全传输。 总结来说,C#中的SM2算法提供了高效且安全的加密、解密、签名和验签功能,能够与Java平台无缝对接。通过理解和应用这些技术,开发者可以在跨平台的应用场景下保证数据的安全性和完整性,为软件开发提供坚实的安全基础。
2024-07-14 15:31:53 1.86MB java
1
本demo使用ukey型号是UKEY3000D,可自行淘宝购买。 使用vue的架子,可以获取ukey的唯一编码; 可以设置ukey的账号密码,自动获取账号密码。 可以设置加密密钥,使用加密密钥进行加解密。 UKEY3000D内置了国密SM2算法,可以生成密钥对,使用密钥对进行加解密,签名验签等。 UKEY3000D提供了接口交互,websocket两种形式进行交互。 以上功能已经调试过,可直接使用。
2024-07-08 15:10:31 296KB vue.js usbkey ukey sm2加解密
1
国密算法SM2、SM3、SM4的介绍及Java实现
2024-07-05 16:09:49 19KB java
1
delphi7 国密算法实现文件加密解密 用到了sm2,sm3,sm4算法(源码+测试可用)
2024-06-25 11:45:55 607KB delphi7 源码
1
原文链接:https://qihongtao.blog.csdn.net/article/details/134978662?spm=1001.2014.3001.5502 sm2+openssl.zip 使用C++实现的openssl调用sm2实现文件签名的功能。 C++源代代码可以直接使用。也上传了openssl1.1.1的头文件、lib文件和dll文件。 因为国产化原因,项目中需要使用国标sm2签名算法对文件进行签名和验签。OpenSSL 1.1.1版本提供了对国密SM2算法的支持,在之前的版本openssl不支持。 关注公众号 QTShared,后台私信留言免费获取。
2024-06-22 14:42:19 7.64MB openssl 国密算法
SM2公钥加密算法国密公钥加密标准之一,由国家密码管理局与2010年12月公布。 SM2属于非对称加密算法,使用公钥加密,私钥解密,在安全性和运算速度方面要优于RSA算法。 SM2公钥加密适用于加密长度较短的数据,如会话密钥和消息报文。SM2公钥加密不仅对数据加密,还提供防篡改的特性,即被篡改的或伪造的密文可以在解密的过程中被检查发现,因此通过SM2公钥加密的消息无需格外的校验机制。消息经过SM2公钥加密后长度会增加不到100字节的长度,加密方在准备缓冲区时需要加以留意。 SM3属于不可逆加密算法,类似于md5,常用于签名。 SM4属于对称加密算法,可用于替代DES/AES等国际算法, SM4算法与AES算法具有相同的密钥长度和分组长度,都是128位。
2024-05-28 20:31:26 3.81MB Delphi
1