OPENSSL 学习整理-介绍
Openssl目录名以及功能描述
目录名 |
功能描述 |
Crypto |
存放OpenSSL 所有加密算法源码文件和相关标注如X.509 源码文件,是OpenSSL中最重要的目录,包含了OpenSSL 密码算法库的所有内容。 |
SSL |
存放OpenSSL 中SSL 协议各个版本和TLS 1.0 协议源码文件,包含了OpenSSL 协议库的所有内容。 |
Apps |
存放OpenSSL 中所有应用程序源码文件,如CA、X509 等应用程序的源文件就存放在这里。 |
Doc |
存放了OpenSSL 中所有的使用说明文档,包含三个部分:应用程序说明文档、加密算法库API说明文档以及SSL 协议API 说明文档。 |
Demos |
存放了一些基于OpenSSL 的应用程序例子,这些例子一般都很简单,演示怎么使用OpenSSL其中的一个功能。 |
Include |
存放了使用OpenSSL 的库时需要的头文件。 |
Test |
存放了OpenSSL 自身功能测试程序的源码文件 |
OpenSSL算法目录
openSSL 的算法目录Crypto 目录包含了OpenSSL 密码算法库的所有源代码文件,是OpenSSL 中最重要的目录之一。OpenSSL 的密码算法库包含了OpenSSL 中所有密码算法、密钥管理和证书管理相关标准的实现,在Windows 下编译后的库文件名为libeay32.lib,在Linux 下编译后生产的库文件名为libcrypto.a。Crypto 目录下包含了众多的子目录,这些目录大多数以相关的算法或标准名称的简写命名。当然,并非所有这些目录存放的源文件都是密码算法和标准,有些是OpenSSL 本身的一些相关功能文件,如BIO、DSO 和EVP 等。
Crypto 子目录列表
Aes |
对称算法,美国新的对称加密算法标准AES 算法源码。 |
Bf |
对称算法,Blowfish 对称加密算法源码。 |
Cast |
对称算法,CAST 对称加密算法源码。 |
Des |
对称算法,包括了DES 和3DES 对称加密算法源码。 |
Idea |
对称算法,IDEA 对称加密算法源码。 |
Rc2 |
对称算法,RC2 对称加密算法源码。 |
Rc4 |
对称算法,RC4 对称加密算法源码 |
Rc5 |
对称算法,RC5 对称加密算法源码。 |
Dh |
非对称算法,DH 非对称密钥交换算法源码。 |
Dsa |
非对称算法,DSA 非对称算法源码,用于数字签名。 |
Ec |
非对称算法,EC 椭圆曲线算法源码。 |
Rsa |
非对称算法,RSA 非对称加密算法源码,既可以用于密钥交换,也可以用于数字签名。 |
Md2 |
信息摘要算法,MD2 信息摘要算法源码。 |
Md5 |
信息摘要算法,MD5 信息摘要算法源码。 |
Mdc2 |
信息摘要算法,MDC2 信息摘要算法源码。 |
Sha |
信息摘要算法,SHA 信息摘要算法源码,包括了SHA1 算法。 |
Ripemd |
信息摘要算法,RIPEMD-160 信息摘要算法源码。 |
Comp |
数据压缩算法数据压缩算法的函数接口,目前没有压缩算法,只是定义了一些空的接口函数 |
Asn1 |
PKI 相关标准ASN.1 标准实现源码,只实现了PKI 相关的部分,不是完全实现。包括DER 编解码等功能。 |
Ocsp |
PKI 相关标准OCSP(在线证书服务协议)实现源码。 |
Pem |
PKI 相关标准PEM 标准实现源码,包括了PEM 的编解码功能。 |
Pkcs7 |
PKI 相关标准PKCS#7 标准实现源码。PKCS#7 是实现加密信息封装的标准,包括了证书封装的标准和加密数据的封装标准。 |
Pkcs12 |
PKI 相关标准PKCS#12 标准实现源码。包括了PKCS#12 文件的编解码功能。PKCS#12是一种常用的证书和密钥封装格式。 |
X509 |
PKI 相关标准X.509 标准的实现源码。包括了X.509 的编解码功能,证书管理功能等。X509v3 PKI 相关标准X.509 第三版扩展功能的实现源码。 |
Krb5 |
其它标准支持支持Kerberos 协议的一些接口函数和结构定义 |
Hmac |
其它标准支持HMAC 标准的支持结构和函数源源代码。 |
Lhash |
其它标准支持动态HASH 表结构和函数源代码 |
Bio |
自定义OpenSSL 自身定义的一种抽象IO 接口,封装了各种平台的几乎所有IO 接口,如文件、内存、缓存、标准输入输出以及Socket 等等。 |
Bn |
自定义OpenSSL 实现大数管理的结构及其函数。 |
Buffer |
自定义OpenSSL 自定义的缓冲区结构体。 |
Conf |
自定义OpenSSL 自定义的管理配置结构和函数。 |
Dso |
自定义OpenSSL 自定义的加载动态库的管理函数接口。如使用Engine 机制就用到了这些函数提供的功能。 |
Engine |
自定义OpenSSL 自定义的Engine 机制源代码。Engine 机制运行OpenSSL 使用第三方提供的软件密码算法库或者硬件加密设备进行数据加密等运算。相当于Windows 平台的CSP 机制。 |
Err 自定义OpenSSL 自定义的错误信息处理机制。 |
|
Evp |
自定义OpenSSL 定义的一组高层算法封装函数,包括了对称加密算法封装、非对称加密算法封装、签名验证算法封装以及信息摘要算法封装,类似 PKCS#11 提供的接口标准。 |
Objects |
自定义OpenSSL 管理各种数据对象的定义和函数。事实上,Objects 的OID 是根据ASN.1 的标准进行命名的,不完全是OpenSSL 自定义的结构。 |
Rand 自定义OpenSSL 的安全随机数产生函数和管理函数。 |
|
Stack |
自定义定义了OpenSSL 中STACK 结构和相关管理函数。 |
Threads |
自定义OpenSSL 处理线程的一些机制。 |
Txt_db |
自定义OpenSSL 提供的文本证书库的管理机制。 |
Ui |
自定义OpenSSL 定义的一下用户接**换函数。 |
Perlasm |
自定义编译的时候需要用到的一些Perl 辅助配置文件。 |
对称加密算法
OpenSSL 一共提供了8 种对称加密算法,其中7 种是分组加密算法,仅有的一种流加密算法是RC4。这7 种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES 使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128 位,其它算法使用的则是64 位。事实上,DES 算法里面不仅仅是常用的DES 算法,还支持三个密钥和两个密钥3DES 算法。
虽然每种加密算法都定义了自己的接口函数,但是OpenSSL 还使用EVP 封装了所有的对称加密算法,使得各种对成加密算法能够使用统一的API 接口EVP_Encrypt 和EVP_Decrypt 进行数据的加密和解密,大大提供了代码的可重用性能。
非对称加密算法
OpenSSL 一共实现了4 种非对称加密算法,包括DH 算法、RSA 算法、DSA 算法和椭圆曲线算法(EC)。DH 算法一般用户密钥交换。RSA 算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA 算法则一般只用于数字签名。
跟对称加密算法相似,OpenSSL 也使用EVP 技术对不同功能的非对称加密算法进行封装,提供了统一的API 接口。如果使用非对称加密算法进行密钥交换或者密钥加密,则使用EVP_Seal 和EVP_Open 进行加密和解密;如果使用非对称加密算法进行数字签名,则使用EVP_Sign 和EVP_Verify 进行签名和验证。
信息摘要算法
OpenSSL 实现了5 种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA 算法事实上包括了SHA 和SHA1 两种信息摘要算法,此外,OpenSSL 还实现了DSS 标准中规定的两种信息摘要算法DSS 和DSS1。
OpenSSL 采用EVP_Digest 接口作为信息摘要算法统一的EVP 接口,对所有信息摘要算法进行了封装,提供了代码的重用性。
密钥和证书管理
密钥和证书管理是PKI 的一个重要组成部分,OpenSSL 为之提供了丰富的功能,支持多种标准。
首先,OpenSSL 实现了ASN.1 的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL 等数据对象的DER、PEM 和BASE64 的编解码功能。OpenSSL 提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12 和PKCS#8 的编解码功能。OpenSSL 在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。
在此基础上,OpenSSL 实现了对证书的X.509 标准编解码、PKCS#12 格式的编解码以及PKCS#7 的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。
事实上,OpenSSL 提供的CA 应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。
Engine 机制
Engine 机制的出现是在OpenSSL 的0.9.6 版的事情,开始的时候是将普通版本跟支持Engine 的版本分开的,到了OpenSSL 的0.9.7 版,Engine 机制集成到了OpenSSL 的内核中,成为了OpenSSL 不可缺少的一部分。
Engine 机制目的是为了使OpenSSL 能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。OpenSSL 的Engine 机制成功地达到了这个目的,这使得OpenSSL 已经不仅仅使一个加密库,而是提供了一个通用地加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备更OpenSSL 协调工作,需要写少量的接口代码,但是这样的工作量并不大,虽然还是需要一点密码学的知识。Engine 机制的功能跟Windows 提供的CSP 功能目标是基本相同的。
BIO 机制
BIO 机制是OpenSSL 提供的一种高层
IO 接口,该接口封装了几乎所有类型的IO 接口,如内存访问、文件访问以及Socket 等。这使得代码的重用性大幅度提高,OpenSSL 提供API 的复杂性也降低了很多。
OPENSSL 学习整理-介绍的更多相关文章
- !!对python列表学习整理列表及数组详细介绍
1.Python的数组分三种类型:(详细见 http://blog.sina.com.cn/s/blog_6b783cbd0100q2ba.html) (1) list 普通的链表,初始化后可以通过特 ...
- HttpClient学习整理
HttpClient简介HttpClient 功能介绍 1. 读取网页(HTTP/HTTPS)内容 2.使用POST方式提交数据(httpClient3) 3. 处理页面重定向 ...
- Wix学习整理(5)——安装时填写注册表
原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...
- Wix学习整理(3)——关于Windows Installer和MSI
原文:Wix学习整理(3)--关于Windows Installer和MSI 关于Windows Installer Windows Installer是微软Windows操作系统自带的一个软件安装和 ...
- Wix学习整理(1)——快速入门HelloWorld
原文:Wix学习整理(1)--快速入门HelloWorld 1 Wix简介 Wix是Windows Installer XML的简称,其通过类XML文件格式来指定了用于创建Windows Instal ...
- 《AngularJS学习整理》系列分享专栏
<AngularJS学习整理>系列分享专栏 <AngularJS学习整理>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/re ...
- Spring IOC设计原理解析:本文乃学习整理参考而来
Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. I ...
- js数组学习整理
原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...
- TweenMax学习整理--特有属性
TweenMax学习整理--特有属性 构造函数:TweenMax(target:Object, duration:Number, vars:Object) target:Object -- 需要缓 ...
随机推荐
- 转载--thinkphp框架的路径问题 - 总结
转自:http://blog.sina.com.cn/s/blog_827ddd950100ulyv.html TP中有不少路径的便捷使用方法,比如模板中使用的__URL__,__ACTION__等, ...
- php目录文件下有php-ini-development和php.ini-production。
1.apache: 只需要你解压到相应目录既可以,比如我这边将下载的apache文件解压到 C:\Apache24: bin目录下有: ApacheMonitor.exe和httpd.exe可用于服务 ...
- PHP 错误与异常 笔记与总结(18 )页面重定向实现
在发生错误时,将用户重定向到另一个页面. <?php header('content-type:text/html; charset=utf-8'); class ExceptionRedire ...
- PHP 错误与异常 笔记与总结(6)将错误日志保存在系统日志中
[将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: error_log = syslog 或者在运行时使用 ini_set() 函数设置. [例1] <?php ...
- 实现ScrollView中包含ListView,动态设置ListView的高度
ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...
- Ubuntu 安装字体
将字体Copy到/usr/share/fonts/windows目录下,然后执行以下几条命令更新系统字体缓存: cd /usr/share/fonts/vista/ sudo mkfontscale ...
- TP中不区分大小写__APP__和__URL__的注意事项
控制器命名为 : AuthGroupAction.class.php 问题 : 在控制器跳转中.如果模板跳转时地址的大小写错了..就会报无法加载模块 报错 : 无法加载模块:Authgroup 解决办 ...
- Unity 区分不同平台
问题:公司开发的游戏实在android平台上运行,但是我们是在windows平台下进行开发,OK ,经常有些地方开发完之后就要换到android上面,能区分平台的不同就可以对代码做区分处理 回答:un ...
- MP20 MBO issue summary
MP3 MBO经验,教训 改名字HGA003_PTOT_01,发现居然闪现进度条,正常情况是不会闪现进度条的,只是改个名字而已,怀疑之前用过这个名字,所以我后来改成HGA003_PTOT_03了. 先 ...
- B-Tree indexs
mysql_High.Performance.MySQL.3rd.Edition.Mar.2012 A B-Tree index speeds up data access because the s ...