一、引言
这仍然是信息安全课程的一次作业,老师的要求包括以源代码方式来安装openssl,了解AES和RSA加密算法并去尝试调用openssl库中AES和RSA算法的API,其实总体上安装以及实验还是比较容易的,不过还是踩了一些坑,这里还是记录一下,顺便试试CSDN的Markdown编辑器。
本文演示使用的操作系统为Ubuntu 16.04
二、安装
1.下载源码包
从官网上可以找到源码包的下载,这里我直接给出下载链接:
openssl源码包下载
根据官网的描述,1.1.1版本将是目前他们长期支持的版本,一直到2023年,建议使用1.0.x版本的用户也去安装这个最新版本。
2.编译安装
解压下载的源码包,可以看到如下的目录结构
可以点开INSTALL文件来查看安装说明,这里我们按照它说的最简说明方式来进行安装:
on Unix (again, this includes Mac OS/X):
$ ./config
$ make
$ make test
$ sudo make install
其中最后一条命令如果不是root用户执行,需要加上sudo,否则无法访问系统根目录的一些文件夹,至少我第一次没加sudo运行时报了错。
这四条命令运行完之后都没有报错的话,说明它的安装脚本中的所有任务都完成了,这时可以使用
openssl version
命令来查看当前openssl的版本,不过我在这时遇到了问题,报错是这样的:
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
通过查找资料,这个问题也很容易就解决了,原因大概是因为libssl.so.1.1被安装脚本放置到了/usr/local/的lib下,而命令行调用的时候找的是/usr/的lib下的libssl.so.1.1,所以我们只需要用如下两条命令在/usr/的lib下创建链接文件即可:
ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
值得一提的是,我百度到的命令的lib文件夹命名为lib64,这里一定要结合自己的情况去查看,不要直接复制命令去运行。
在解决这个问题之后,再运行之前的openssl version命令就会出现如下的显示,也说明安装成功了:
OpenSSL 1.1.1 11 Sep 2018
三、运行
1.MD5算法的实验
首先来实验一下最简单,也是最常用的MD5摘要算法,说它简单是因为它的API只有三个,用来试运行再好不过了,这里我也是参照了一位博主的一个例子来实验的,更详细的讲解可以看这篇博客:
Linux下C语言使用openssl库进行加密
用到的代码也是直接搬过来使用的,这里贴一下吧:
#include <openssl/md5.h>
#include <stdio.h>
#include <string.h>
int main()
{
MD5_CTX ctx;
unsigned char outmd[16];
int i=0;
memset(outmd,0,sizeof(outmd));
MD5_Init(&ctx);
MD5_Update(&ctx,"hel",3);
MD5_Update(&ctx,"lo\n