课设总结
一、设计方案及可行性分析
课程题目为基于密码算法库的国密算法支持研究 整体内容围绕国密算法展开,通过调用密码算法库自带的函数或命令行,验证密码算法库对国密算法的支持。
如今随着国密算法以sm2 sm3 sm4等密码算法成为国际标准,越来越多的密码算法库已经可以支持国密算法。如使用较为方便的openssl或其分支以国密命名
的gmssl。因此想要找到支持国密算法的密码库并不是一件难事,团队的目标是尽可能在课设准备时间内找到更多支持国密算法的密码库或者工具包,并验证
其可行性。
二、详细设计思路
-
首先将通用的密码算法库按支持的语言进行分配,小组总共三个人员,分别负责python ,c,java,当然还有go和jsp语言,go语言和jsp语言支持国密的方
式比较固定,所以小组采用共同查找资料,并在一台设备上完成的方式。 -
我在本小组实现的部分是java部分,也参与了c部分,c部分整体调节起来比较繁琐,
而java因为语言的特性在linux和windows中的操作流程相差不大。
Java:
Java部分找到的支持国密的库为三个,分别为是bouncycastle,crypto-gmsm,Hutool。三个库支持的国密算法都为sm2,sm3,sm4。其中hutool针对Bouncy
Castle做了简化包装。其中关于国密部分hutool将其整合为SmUtil。在实现java代码过程中,我创建的java项目都是maven,因为创建maven项目可以通过对
pom.xml文件添加dependency,添加依赖可以更加方便的获得我们想要获得的jar包。
实现过程如下:
Bouncycastle
crypto-gmsm:
Hutool:
C:
- C语言部分,我阅读了很多密码算法库的说明,查找到了很多支持国密算法的c语言库,通过阅读函数库说明,在理论上支持国密的函数库有openssl,gmssl,
crypt++,SM9_FREE, Gmlib, Libgcrypt,libtomcrypt-gm,tinycrypt,gmalg, 但是在配置函数库时libtomcrypt-gm和gmalg和libgcrypt都因为没
有无法写出能够调通的测试代码最终失败。C语言部分我参与并完成的函数库有openssl,gmssl,crypt++,和gmlib,SM9_FREE。其中SM9_FREE函数库是
基于Miracl的函数库,因为 源码关系 Miracl密码库 比较庞大,SM9_FREE只截取了其中最核心的部分,包括大整数运算,Fp,Fp2,Fp4域计算以及Fp
和Fp^2上椭圆曲线基础计算等功能。 SM9_FREE正如他的名字一样,他主要支持的算法是SM9。Gmlib支持sm2,sm3,sm4 和zuc本质上也参考了crypt++
openssl。
crypt++:
- 因为crpyt++库他本质上是一个vs项目,通过运行vs项目我们才能得到.a文件,我们需要将.a文件和.h文件结合起来才能运行成功,因为没有成功在openeuler
中配置vs,所以并没有成功的将crypt++函数库转移到unix环境中去,只在windows环境中成功运行。
Gmlib:
- 因为gmlib的函数库需要通过cmake 对应的list文件去生成测试文件,所以在对函数库进行测试的时候可以通过修改cmakelist 文件进而得到想要的test文件
具体只需要修改add_executable和target_link_libraries 函数即可。
SM9_FREE:
SM9_FREE函数库本身需要通过make函数去生成.a文件。生成.a文件之后只要通过make test 就可以将 自带的SM9.txt文件同.a文件一同编译。生成test 运行./test即可
当然如果直接下载解压SM9_FEEE文件会因为makefile有问题而报错,所以需要对makefile进行修改。具体方法:https://www.cnblogs.com/PiaYie/p/16746335.html
Openssl:
openssl:https://www.cnblogs.com/hzxjkl/p/16828260.html
标签:总结,文件,函数库,课设,FREE,SM9,算法,国密 From: https://www.cnblogs.com/hzxjkl/p/16972217.html