课设第一周进展(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对其进行解密

posted @ 2022-11-15 18:08  20201325my  阅读(121)  评论(0编辑  收藏  举报