- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
最近下载
- DLT769-2001 电力系统微机继电保护技术导则.pdf
- 龙思思-新媒体产品设计与项目管理-第2章 新媒体产品.pptx
- 专题16:《鲁滨逊漂流记》综合练习中考语文一轮复习名著阅读(全国)解析版.docx VIP
- 专题09:《钢铁是怎样炼成的》综合练习中考语文一轮复习名著阅读(全国)解析版.docx VIP
- 新22J02 屋面-标准图集.docx VIP
- SIEMENS S7-400产品介绍说明.ppt
- 专题08:《经典常谈》综合练习中考语文一轮复习名著阅读(全国)解析版.docx VIP
- 2018版电力建设工程定额和费用计算规定介绍.pdf
- 2024苏州城投集团公开招聘试题及答案解析.docx
- 专题07:《昆虫记》综合练习中考语文一轮复习名著阅读(全国)解析版.docx VIP
文档评论(0)