深入理解OpenSSL:源码结构与EVP封装解析

需积分: 48 30 下载量 104 浏览量 更新于2024-08-09 收藏 2.4MB PDF 举报
"本文档深入探讨了OpenSSL编程,特别是涉及源码结构和EVP(加密虚拟提供者)封装的方面。作者通过个人经验分享了对OpenSSL的理解,旨在帮助读者更好地掌握OpenSSL的使用和开发。" 在OpenSSL编程中,源码结构是一个关键点。其中,`crypto/evp`目录包含了核心的加密和摘要功能。以下是这个目录中不同部分的详细解释: 1. **全局函数**: 这部分主要包含`c_allc.c`, `c_alld.c`, `c_all.c`和`names.c`等文件。这些文件负责加载OpenSSL支持的所有对称加密算法和摘要算法,并将它们放入哈希表中。`OpenSSL_add_all_digests`用于添加所有摘要算法,`OpenSSL_add_all_ciphers`用于添加所有对称加密算法,而`OpenSSL_add_all_algorithms`则同时调用这两个函数。此外,用户还可以单独使用`EVP_add_digest`和`EVP_add_cipher`函数来加载特定的算法。 2. **BIO扩充**: BIO(Basic Input/Output)是OpenSSL中的一个抽象层,提供了一种统一的I/O接口。`bio_b64.c`、`bio_enc.c`、`bio_md.c`和`bio_ok.c`分别实现了对Base64编码解码、对称加密解密和摘要计算的BIO_METHOD。这使得开发者可以方便地在不同的数据流操作中应用这些功能。 3. **摘要算法的EVP封装**: `digest.c`是实现EVP接口的摘要算法的核心文件。它调用了各个摘要算法的回调函数,比如MD5、SHA等。每个摘要算法都有对应的`EVP_MD`静态结构定义在`m_xxx.c`文件中,如`m_md5.c`和`m_sha1.c`等,这些文件实现了EVP接口与具体算法的关联。 4. **对称算法的EVP封装**: 对称加密算法同样通过EVP接口进行封装,提供了高层抽象以便于使用。这些算法的实现细节通常在对应的`e_xxx.c`文件中,比如`e_rc4.c`代表RC4算法的实现。 作者通过编写硕士论文和实际项目经验,对OpenSSL有深入的理解。他提到最初通过替换RC4算法以实现自定义的对称加密,然后在后续的工作中剥离了ASN.1模块,进一步加深了对OpenSSL的理解。在这个过程中,作者养成了记录学习心得的习惯,并最终决定撰写这本书,分享他的知识和经验。 尽管作者在学术和职业发展上遇到了挫折,但他的热情和坚持使他在OpenSSL编程领域积累了丰富的知识。通过在openssl.cn论坛上解答问题,作者不断提升了自己的技能,并从中找到了学习的乐趣。书中详细介绍了OpenSSL的源码结构和使用,对于希望深入了解OpenSSL的开发者来说是一份宝贵的资源。