课设第一周进展(OpenSSL)
一、安装OpenSSL
OpenSSL简介
OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux、Windows、Mac OS等多种平台。
OpenSSL整个软件包大概可以分成三个主要的功能部分:
-
密码算法库
-
SSL协议库
-
应用程序
openEuler中OpenSSL的安装
首先在网址OpenSLL最新版中查找OpenSSL最新版进行下载(我这里是openssl-1.1.1s)
安装过程
下载获得的是一个openssl-1.1.1s.tar.gz压缩包
首先需要将其解压
tar xzvf openssl-1.1.0-pre1.tar.gz
解压后会生成一个文件夹
cd openssl-1.1.1s
进入到该文件夹中
随后执行下述命令(有些教程写的是./configure,若找不到命令使用./config也可以)
./configure
make
sudo make install
到这里我们就安装好了我们的OpenSSL库了
二、测试OpenSSL
OpenSSL密码算法库
编写一个测试代码test_openssl.c:
#include <stdio.h>
#include <openssl/evp.h>
int main(){
OpenSSL_add_all_algorithms();
return 0;
}
然后使用下述命令进行编译运行程序
gcc -o to test_openssl.c -I /usr/local/ssl/inlcude -L /usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
随后使用./to;echo $?
进行运行程序有
配置LD_LIBRARY_PATH并检查openssl可执行程序版本号
$ export LD_LIBRARY_PATH=`pwd`
$ ./apps/openssl version
OpenSSL 1.1.1s 1 Nov 2022
三、实现Base64算法
Base64算法简介
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
OpenSSL密码库使用Base64算法
简单命令行实现编码解码
-
编码:
echo “待编码字符串” | openssl base64
-
解码:
echo “待解码字符串” | openssl base64 -d
将文件中的内容编译为base64编码
- test.txt文件:
-
使用
openssl base64 -in test.txt -out test.b64
进行调用base64算法 -
结果为:
- 使用
openssl base64 -d -in test.b64 -out testo.txt
进行解码
四、实现SM2算法
SM2算法简介
SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法。公钥密码算法属于非对称加密算法,随着密码技术和计算机技术的发展,目前常用的1024位RSA算法面临严重的安全威胁,我们国家密码管理部门经过研究,决定采用SM2椭圆曲线算法替换RSA算法。
OpenSSL密码库使用SM2
首先检查一下是否支持SM2
openssl ecparam -list_curves | grep SM2
创建EC参数和原始私钥文件
-
创建EC参数和原始私钥文件:
openssl ecparam -out rocsm2kp.pem -name SM2 -param_enc explicit -genkey
-
查看EC参数和私钥文件内容:
openssl ecparam -in rocsm2kp.pem -text
- 验证EC参数是否正确
openssl ecparam -in rocsm2kp.pem -check
- 查看公私钥
openssl ec -in rocsm2kp.pem -text -noout
导出公私钥
-
导出私钥:
openssl pkcs8 -topk8 -inform PEM -in rocsm2kp.pem -outform pem -nocrypt -out rocsm2pri.pem
-
导出公钥:
openssl ec -in rocsm2kp.pem -pubout -out rocsm2pub.pem
OpenSSL密码库使用SM2签名验签
创建文本文件
- test.txt
- 私钥签名
openssl dgst -sha512 -sign rocsm2kp.pem -out testsm2.sig test.txt
- 公钥验签
openssl dgst -sha512 -verify rocsm2pub.pem -signature testsm2.sig test.txt
五、实现SM3算法
SM3算法简介
SM3是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。
在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。据国家密码管理局表示,其安全性及效率与SHA-256相当。
OpenSSL密码库使用SM3
echo -n "abc" | ./apps/openssl dgst -SM3
(stdin)= 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0
OpenSSL SM3 计算文件Hash
openssl dgst -SM3 sign.data
六、实现SM4算法
检查对称算法
./apps/openssl enc -ciphers
SM4算法简介
SM4是一种分组密码算法,其分组长度为128位(即16字节,4字),密钥长度也为128位(即16字节,4字)。其加解密过程采用了32轮迭代机制(与DES、AES类似),每一轮需要一个轮密钥(与DES、AES类似)。
OpenSSL实现SM4加密解密
- 原文件test.txt
- 加密
使用openssl enc -in test.txt -out testo.txt -e -sm4-ctr -pbkdf2 -k 123123
指令进行加密。
其中参数 -e 表示,这里要对 -in 指定的文件进行加密处理。 -pbkdf2 是指定使用PBKDF2函数对密码进行处理,密码是参数 -k 指定的 123123。
- 解密
使用openssl enc -in testo.txt -out other.txt -d -sm4-ctr -pbkdf2 -k 123123
对其进行解密