网站大量收购独家精品文档,联系QQ:2885784924

SM2国密算法如何快速上手?原理不太理解,但急需使用该怎么办?.docx

SM2国密算法如何快速上手?原理不太理解,但急需使用该怎么办?.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SM2国密算法如何快速上手?原理不太理解,但急需使用该怎么办?

或许你正在为SM2国密算法的紧急应用发愁——原理晦涩难懂,但项目进度不等人?

我们完全理解这种技术落地的迫切需求。以下是直击要害的操作指南(一些基础概念,已整理至文末附录了)。

具体代码详见我上传的网上同名资源。

接下来简要说明一下国密算法

国密算法SM2是国家商用密码算法体系的重要组成部分,该算法基于椭圆曲线密码学的数学特性,通过选取标准曲线参数并结合预设参数生成目标密文。

简而言之,SM2的技术实现原理是通过椭圆曲线方程中的点运算规则完成加密过程。

对于实际应用而言,使用者无需深入掌握其底层算法原理,重点在于正确应用标准接口实现加解密功能。

虽然参数和加密结果通常由数字构成,但当我们需要处理大数据或字符串时,实际采用的是大数运算机制——将数据视为一个个超大整数进行处理。

需要特别说明的是,即便在64位系统中,单次运算的数值上限仅为2^64-1,但这并不影响我们对超长数据的处理能力。大数运算库已完美解决了底层计算难题,开发者只需调用现成接口即可,完全不需要深究其数学原理。这种技术封装使得密码学应用开发变得更加高效便捷。

SM2国密算法主要业务流程

接下来说正题,SM2国密算法主要业务流程无非5个,1生成密钥、2加密、3解密、4签名、5验证。

1生成密钥

输入,无任何参数

输出,密钥(96字节)(私钥(32字节)、公钥(64字节))

2加密

输入,公钥(64字节)、输入数据(任意字节)、输入数据长度

输出,输出数据(任意字节,加密结果)、输出数据长度

3解密

输入,私钥(32字节)、输入数据(任意字节)、输入数据长度

输出,输出数据(任意字节,解密结果)、输出数据长度

4签名

输入,私钥(32字节)、用户ID数据(任意字节)、用户ID数据长度、输入数据(任意字节)、输入数据长度

输出,输出数据(64字节字节,签名数据)、输出数据长度

5验证

输入,公钥(64字节)、用户ID数据(任意字节)、用户ID数据长度、输入数据(任意字节)、输入数据长度、签名数据(64字节)

输出,是否验证通过

深入探讨该算法的技术细节

通过前文的介绍,您应已掌握SM2国密算法的基本使用方法。接下来我们将深入探讨该算法的技术细节。特别是生成密钥、加密与解密这三个业务流程的具体实现逻辑。

若您认为理解这些技术细节存在困难,也可暂时略过此部分内容,不影响算法的基本应用。

1生成密钥时:

私钥由随机数生成,公式一般为:私钥=随机数(1=随机数N-2+1),

公钥由私钥生成,公式为:私钥*基点G,

其中基点G,可以直接由大数算法库生成,不用深究细节。

2加密时:

输出数据=C1+C2+C3

C1数据=K*基点G(1=KN-1+1),K为随机数

C1大小=1字节(起始符0x04)+32字节(横坐标)+32字节(纵坐标)

C2数据=KeyDerivation(K*公钥)^消息=KeyDerivation(K*私钥*基点G)^消息=KeyDerivation(私钥*C1)^消息

C2大小=数据大小-C1大小-C3大小=数据大小-(1字节+32字节*2+32字节)

C3数据=SM3((K*公钥)横坐标+消息+(K*公钥)纵坐标)=SM3((K*私钥*基点G)横坐标+消息+(K*私钥*基点G)纵坐标)=SM3((私钥*C1)横坐标+消息+(私钥*C1)纵坐标)

C3大小=32字节(SM3输出数据大小为32字节)

3解密时:

输入数据=C1+C2+C3

C1数据=K*基点G

C1大小=1字节(起始符0x04)+32字节(横坐标)+32字节(纵坐标)

C2数据=KeyDerivation(K*公钥)^消息

=KeyDerivation(K*私钥*基点G)^消息

=KeyDerivation(私钥*C1)^消息

C2大小=数据大小-C1大小-C3大小=数据大小-(1字节+32字节*2+32字节)

C3数据=SM3((K*公钥)横坐标+消息+(K*公钥)纵坐标)

=SM3((K*私钥*基点G)横坐标+消息+(K*私钥*基点G)纵坐标)

=SM3((私钥*C1)横坐标+消息+(私钥*C1)纵坐标)

C3大小=32字节(SM3输出数据大小为32字节)

仔细看,解密中的输入数据即加密中的输出数据,C1、C2、C3一一对应,

C1对应K*基点G,直接拿来校验C2、C3,

校验C2时:私

您可能关注的文档

文档评论(0)

skyksksksksks + 关注
实名认证
内容提供者

谢谢关注

1亿VIP精品文档

相关文档