开源密码库
最近发现有很多现成的密码库,可以直接使用,现在这里记录总结一下:
国外开源库
LibTomCrypt
短小精干,结构清晰明了,速度中等。适合初学密码学的学生和期望对密码学有进一步了解的人士。名气和使用广泛性不如 OpenSSL和Crypto++
LibTomCtypt中实现了以下算法:AES、Safer、Twofish、anubis、Blowfish、Cast5、DES、KASUMI、khazad、KSEED、Multi2、noekeon、RC2、RC5、RC6、skipjack、Xtea。
OpenSSL
C语言实现,整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。支持跨平台。代码量比较庞大,经过很多次调整,目前的结构不再清晰明了,要代码剥离的话非常痛苦,使用起来不是很方便。
下载
安装
参考:链接
注意:安装后需要配置系统变量才能咋CMD中使用
使用
1、help
消息摘要算法
消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,目前可以被解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。
openssl实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA和RIPEMD。此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。
摘要一般有两个作用:1)做信息完整性校验;2)保存密码,有些密码是直接在数据库中采用MD5(真实密码值)保存的,有的还进行加盐处理,使其难以破解,这样密码只能重置,无法告诉你原始过程,因为摘要是不可逆的。
openssl dgst 常用选项有: [-md5|-md4||-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一种摘要算法 -out filename:将摘要的内容保存到指定文件中 帮助:man dgst
1、MD5
2、MD4
3、blake2b512
4、SM3
加解密算法
目录结构
1、Crypto目录
是OpenSSL所有加密算法源码文件和一些PKI相关标准源码存放的目录(如X509源码文件)。包含了OpenSSL密码算法库的所有内容。是OpenSSL中最重要的目录。
2、SSL目录存放了SSL协议各个版本的实现源码(SSL2.0、SSL3.0)以及TLS1.0的协议源码文件。包含了OpenSSL协议库的所有内容。
3、Doc目录是OpenSSL使用的说明文档存放的目录。包含三个部分:应用程序说明文档、加密算法库API说明文档以及SSL协议API说明文档。
4、APPs目录存放了OpenSSL所有应用程序的源代码文件。即OpenSSL中的各个命令的实现代码。
5、Demos目录OPenSSL应用的实例。主要由一些openSSL的爱好者写的应用实例的例子,在刚开始学习之前,可以研究研究。
6、Include目录存放了使用OpenSSL的库进行编程的时候可能需要使用到的一些头文件。
7、test目录存放了OpenSSL自身功能测试程序的源码文件。
Crypto++
C++语言实现,代码庞大且复杂,使用起来不方便。支持跨平台
mbedtls
ARM mbedtls使开发人员可以非常轻松地在(嵌入式产品中加入加密和 SSL/TLS 功能。它提供了具有直观的 API 和可读源代码的 SSL 库。该工具即开即用,可以在大部分系统上直接构建它,也可以手动选择和配置各项功能。
mbedtls 库提供了一组可单独使用和编译的加密组件,还可以使用单个配置头文件加入或排除这些组件。
从功能角度来看,该mbedtls分为三个主要部分:
- - SSL/TLS 协议实施。
- - 一个加密库。
- - 一个 X.509 证书处理库。
HElib
IBM的同态密码开源库,主要实现了BGV和CKKS方案
Seal
微软的同态密码开源库,主要实现了BFV和CKKS方案
国内开源库
BabaSSL
BabaSSL是一款轻巧、灵活且靠谱的密码学和TLS协议工具集。BabaSSL是蚂蚁集团和阿里集团的各主要业务中所使用的底层密码库,现在开源出来供业界使用。BabaSSL广泛的应用在包括网络、存储、移动端App等场景中。
支持国密:ZUC、SM2、SM3、SM4
基于openssl开发的
GmSSL
GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建PKI/CA、安全通信、数据加密等符合国密标准的安全应用。GmSSL项目是OpenSSL项目的分支,并与OpenSSL保持接口兼容。因此GmSSL可以替代应用中的OpenSSL组件,并使应用自动具备基于国密的安全能力。GmSSL项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。
GmSSL项目由北京大学关志副研究员的密码学研究组开发维护,项目源码托管于GitHub。自2014年发布以来,GmSSL已经在多个项目和产品中获得部署与应用,并获得2015年度“一铭杯”中国Linux软件大赛二等奖(年度最高奖项)与开源中国密码类推荐项目。GmSSL项目的核心目标是通过开源的密码技术推动国内网络空间安全建设。
- 支持SM2/SM3/SM4/SM9/ZUC等全部已公开国密算法
- 支持国密SM2双证书SSL套件和国密SM9标识密码套件
- 高效实现在主流处理器上可完成4.5万次SM2签名
- 支持动态接入具备SKF/SDF接口的硬件密码模块
- 支持门限签名、秘密共享和白盒密码等高级安全特性
- 支持Java、Go、PHP等多语言接口绑定和REST服务接口