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

SM4国密算法如何快速应用?技术原理尚未完全掌握,但项目急需实施该怎么办?.docx

SM4国密算法如何快速应用?技术原理尚未完全掌握,但项目急需实施该怎么办?.docx

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

阅读本文的读者,可能迫切希望了解SM4国密算法的具体应用方法。

为节省诸位时间,我们直接切入核心内容。

需要说明的是,相关加密算法的基础理论要点已整理为补充资料,附于下文供读者随时查阅参考。

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

SM4是我国自主设计的商用分组密码算法,接下来简单介绍一下。

该算法通过增加非线性变换的设计提升安全强度,进而实现更完善的数据加密。

而使用者只需掌握其加解密接口调用方法即可投入工程应用,无需深入解析底层函数构造细节。

接下来说正题,SM4国密算法主要业务流程无非5个,1ECB加密、2ECB解密、3CBC加密、4CBC解密、4MAC。

是不是觉得很熟悉,对的,DES也是这个玩法,其实SM4就是国产DES算法,所以业务流程相似。

1ECB加密

输入,密钥(16字节)、输入数据(任意字节,单个数据大小为16字节)、输入数据长度

输出,输出数据(任意字节,单个数据大小为16字节,加密结果)、输出数据长度

2ECB解密

输入,密钥(16字节)、输入数据(任意字节,单个数据大小为16字节)、输入数据长度

输出,输出数据(任意字节,单个数据大小为16字节,解密结果)、输出数据长度

3CBC加密

输入,密钥(16字节)、初始数据(16字节)、输入数据(任意字节,单个数据大小为16字节)、输入数据长度

输出,输出数据(任意字节,单个数据大小为16字节,加密结果)、输出数据长度

4CBC解密

输入,密钥(16字节)、初始数据(16字节)、输入数据(任意字节,单个数据大小为16字节)、输入数据长度

输出,输出数据(任意字节,单个数据大小为16字节,解密结果)、输出数据长度

5MAC

输入,密钥(16字节)、初始数据(16字节)、输入数据(任意字节,单个数据大小为16字节)、输入数据长度

输出,输出数据(16字节,MAC结果)、输出数据长度

通过前文说明,您可能已掌握SM4国密算法的基本使用方法了。

为帮助深入理解,下文将对该算法的核心技术流程作拓展说明,主要包括ECB模式加解密、CBC模式加解密及MAC生成等关键机制的具体实现原理。

需要特别说明的是,这些技术细节仅作为知识扩展,若理解存在困难,建议暂时略过技术细节部分,实际应用时掌握基础功能即可满足大多数需求。

1ECB加密、ECB解密时:

按照SM4加密、解密即可,

2CBC加密时:

第1块输入数据异或初始数据

-上1步骤异或结果用指定密钥进行SM4加密

-第2块输入数据异或上1步骤加密结果

-上1步骤异或结果用指定密钥进行SM4加密

......(重复上面2步骤直至结束)

-将所有步骤的加密结果拼接在一起,就是加密结果,即输出数据

3CBC解密时:

第1块输入数据用指定密钥进行SM4解密

-上1步骤解密结果异或初始数据

-第2块输入数据用指定密钥进行SM4解密

-上1步骤解密结果异或第1块输入数据

......(重复上面2步骤直至结束)

-将所有步骤的异或结果拼接在一起,就是解密结果,即输出数据

4MAC时:

第1块输入数据异或初始数据

-第2块输入数据异或上1步骤异或结果

......(重复上面1步骤直至结束)

-将所有步骤的异或结果(16字节,实际只有1个)从16进制数据转可见字符串(32字节,即0x31(1)-0x330x31(31))

-上1步骤转换结果前16字节用指定密钥进行SM4加密

-上1步骤加密结果异或上上1步骤转换结果后16字节

-上1步骤异或结果用指定密钥进行SM4加密

-上1步骤加密结果从16进制数据转可见字符串(32字节,即0x31(1)-0x330x31(31))

-上1步骤转换结果前16字节,就是MAC结果,即输出数据

友情提示,上面的MAC业务流程只是某些场景中约定俗成的业务流程,

具体的MAC业务流程,还是需要按照具体情况而定。

这里我自己写了一个类,核心部分只用了C、C++语言,实现了以上功能。

类中函数声明见下方:

/*

@param

pstcdData数据

lOperatorType操作类型,1ECB加密、2ECB解密、3CBC加密、4CBC解密、5MAC

(无此参数)lKeyDataBits密钥数据位数

pucKeyData密钥数据(大小为16字节)

(无此参数)lKeyDataSize密钥数据大小

pucInitValueData初始值数据(操作类型为1ECB加密、2ECB解密时,无此参数;操作类型为3CBC加密、4CBC解密、5MAC时,如果无此参数的数据,可以给全0的数据,大小为16字节)

(无此参数)lInitValueDataSize初始值数据大小

(无此参数)pucUserIDData用户ID

文档评论(0)

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

谢谢关注

1亿VIP精品文档

相关文档