ubuntu安装openssl库

ubuntu18.04安装openssl库

opensssl库是常用的加密函数库,主要有以下加密算法

加密算法

  • 对称加密:指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。
    常见的对称加密算法:DES、3DES、DESX、AES、RC4、RC5、RC6等
  • 非对称加密:指加密和解密使用不同密钥的加密算法,也称为公私钥加密。
    常见的非对称加密算法:RSA、DSA(数字签名用)等
  • Hash算法:Hash算法它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值逆向获得目标信息。
    常见的Hash算法:MD2、MD4、MD5、SHA、SHA-1等

下面介绍openssl库的安装

安装方法

打开命令行终端

新手的话按ctrl+alt+t即可

更新/下载编译器 make 和 gcc

1
2
3
sudo apt install make gcc
sudo apt update
sudo apt upgrade

下载OpenSSL安装包

以版本openssl-1.1.1q版本为例,想要其他版本请到官网下载指定版本:

1
sudo wget https://www.openssl.org/source/openssl-1.1.1b.tar.gz

解压缩

1
sudo tar -zxf openssl-1.1.1b.tar.gz && cd openssl-1.1.1b

编译安装

1
2
3
sudo ./config shared
sudo make
sudo make install

修改默认路径

1
2
sudo ln -s /usr/local/bin/openssl /usr/bin/openssl
sudo ldconfig

检查版本

1
openssl version

如果到这一步能输出版本信息

结果测试

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<stdio.h>
#include<sys/time.h>
#include<openssl/bn.h>
struct timeval timestart, timeend ;
float timeuse_encrypt = 0 , timeuse_decrypt = 0, timeuse_add = 0 , timeuse_mul = 0 , timeuse = 0 ;
int main()
{ BN_CTX *ctx = BN_CTX_new();
BN_CTX_start(ctx);
BIGNUM *r1 = BN_CTX_get(ctx);
BIGNUM *r2 = BN_CTX_get(ctx);
BIGNUM *n = BN_CTX_get(ctx);
BIGNUM *tmp = BN_CTX_get(ctx);
BIGNUM *dv = BN_CTX_get(ctx);
BIGNUM *rem = BN_CTX_get(ctx);
BN_rand(r1, 236896 , 0, 0);
BN_rand(r2, 236896 , 0, 0);
BN_rand(n, 236896 , 0, 0);

gettimeofday(&timestart, NULL);//160*236896
BN_mod_mul(tmp , r1 , r2 , n , ctx);//a mod q = a/q*q
gettimeofday(&timeend, NULL);
timeuse = 1000000 * (timeend.tv_sec - timestart.tv_sec) + timeend.tv_usec - timestart.tv_usec;
printf("\nmod mul time:%f ms\n", timeuse / 1000);

gettimeofday(&timestart, NULL);//160*236896
BN_mul(tmp , r1 , r2 , ctx);//a mod q = a/q*q
gettimeofday(&timeend, NULL);
timeuse = 1000000 * (timeend.tv_sec - timestart.tv_sec) + timeend.tv_usec - timestart.tv_usec;
printf("\nmul time:%f ms\n", timeuse / 1000);

gettimeofday(&timestart, NULL);//160*236896
BN_div(dv , rem , tmp ,n , ctx);//r1*r2/n
gettimeofday(&timeend, NULL);
timeuse = 1000000 * (timeend.tv_sec - timestart.tv_sec) + timeend.tv_usec - timestart.tv_usec;
printf("\ndiv time:%f ms\n", timeuse / 1000);

gettimeofday(&timestart, NULL);//160*236896
BN_mod(tmp , tmp , n , ctx);//r1*r2/n mod q = a/q*q
gettimeofday(&timeend, NULL);
timeuse = 1000000 * (timeend.tv_sec - timestart.tv_sec) + timeend.tv_usec - timestart.tv_usec;
printf("\nmod time:%f ms\n", timeuse / 1000);
BN_CTX_end(ctx);
BN_CTX_free(ctx);
return 0;
}

编译运行

输入如下指令可以编译运行

1
2
gcc test.c -lcrypto
./a.out

可以看到如下输出结果


ubuntu安装openssl库
http://example.com/2022/10/21/ubuntu安装openssl库/
作者
harper
发布于
2022年10月21日
许可协议