WindowsC/C++加密解密实战
上QQ阅读APP看书,第一时间看更新

2.2 C/C++密码库OpenSSL

Crypto++虽好,但功能不如OpenSSL。一线开发中,用得更多的是OpenSSL。虽然OpenSSL是用C语言写的,但在C++程序中使用完全没有问题。何况,OpenSSL很多地方利用了面向对象的设计方法与多态来支持多种加密算法。所以,学好OpenSSL,甚至分析其源码,对我们提高面向对象的设计能力大有帮助。很多著名的开源软件,比如内核XFRM框架、VPN软件StrongSwan等都是用C语言来实现面向对象设计的。因此,我们会对OpenSSL叙述的更为详细些,因为一线实践开发中,经常会碰到这个库的使用(很多C#开发的软件,底层的安全连接也会用VC封装OpenSSL为控件后供C#界面使用,更不要说Linux的一线开发了),希望大家能预先掌握好。

随着Internet的迅速发展和广泛应用,网络与信息安全的重要性和紧迫性日益突出。Netscape公司提出了安全套接层协议(Secure Socket Layer,SSL),该协议基于公开密钥技术,可保证两个实体间通信的保密性和可靠性,是目前Internet上保密通信的工业标准。

Eric A.Young和Tim J. Hudson自1995年开始编写后来具有巨大影响力的OpenSSL软件包,这是一个没有太多限制的开放源代码的软件包,可以利用这个软件包做很多事情。1998年,OpenSSL项目组接管了OpenSSL的开发工作,并推出了OpenSSL的0.9.1版,到目前为止,OpenSSL的算法已经非常完善,对SSL 2.0、SSL 3.0以及TLS 1.0都支持。OpenSSL目前新的版本是1.1.1版。

OpenSSL采用C语言作为开发语言,使得OpenSSL具有优秀的跨平台性能,可以在不同的平台使用。OpenSSL支持Linux、Windows、BSD、Mac等平台,OpenSSL具有广泛的适用性。OpenSSL实现了8种对称加密算法,如AES、DES、Blowfish、CAST、IDEA、RC2、RC4、RC5,实现了4种非对称加密算法,如DH、RSA、DSA和ECC,实现了5种信息摘要算法,如MD2、MD5、MDC2、SHA1和RIPEMD。此外,OpenSSL还实现了密钥和证书的管理。

OpenSSL的License(许可证)是SSLeay License和OpenSSL License的结合,这两种许可证实际上都是BSD类型的许可证,依照许可证里面的说明,OpenSSL可以被用作各种商业、非商业的用途,但是需要相应地遵守一些协定,其实这都是为了保护自由软件作者及其作品的权利。