基于openeuler的openssl编程
2021/10/29 17:11:40
本文主要是介绍基于openeuler的openssl编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
------------恢复内容开始------------
一、编译环境
我下载好之后默认安装了openssl,若未安装的可输入以下命令:
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
tar xvf openssl-1.1.1a.tar.gz
cd openssl-1.1.1a
./config
make
echo ~
sudo make install
cd curl-7.71.1/
./configure --prefix=$PWD/_install --with-ssl
make
make install
二、OpenSSL命令的使用
使用openssl help查看帮助文档
openssl dgst 常用选项(options)有:
[-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一种摘要算法
-out filename:将摘要值保存到指定文件中
测试:
openssl编程
编写一个测试代码:
出现报错
分析错误信息,下载openssl开发包
继续进行编译,运行可执行文件:
成功执行!
BASE64算法
OpenSS1在 Evp.h中提供了Base64 编码和解码的函数。Base64 编码就是把二进制数据转换为可见的 ASCIⅡ字符。Base64 解码是相反的过程。
写一个BASE64的测试代码
#include <string.h> #include <openssl/evp.h> #include <openssl/x509.h> //Base64编码 void tEVP_Encode() { EVP_ENCODE_CTX *ctx; ctx = EVP_ENCODE_CTX_new(); //EVP编码结构体 unsigned char in[1024]; //输入数据缓冲区 int inl; //输入数据长度 char out[2048]={0}; //输出数据缓冲区 int outl; //输出数据长度 FILE *infp; //输入文件句柄 FILE *outfp; //输出文件句柄 infp = fopen("test.dat","rb");//打开待编码的文件 if(infp == NULL) { printf("Open File \"Test.dat\" for Read Err.\n"); return; } outfp = fopen("test.txt","w");//打开编码后保存的文件 if(outfp == NULL) { printf("Open File \"test.txt\" For Write Err.\n"); return; } EVP_EncodeInit(ctx);//Base64编码初始化 printf("文件\"Test.dat\" Base64编码后为:\n"); //循环读取原文,并调用EVP_EncodeUpdate计算Base64编码 while(1) { inl = fread(in,1,1024,infp); if(inl <= 0) break; EVP_EncodeUpdate(ctx,out,&outl,in,inl);//编码 fwrite(out,1,outl,outfp);//输出编码结果到文件 printf("%s",out); } EVP_EncodeFinal(ctx,out,&outl);//完成编码,输出最后的数据。 fwrite(out,1,outl,outfp); printf("%s",out); fclose(infp); fclose(outfp); printf("对文件\"Test.dat\" Base64编码完成,保存到\"test.txt\"文件.\n\n\n"); } //Base64解码 void tEVP_Decode() { EVP_ENCODE_CTX *ctx; ctx = EVP_ENCODE_CTX_new(); //EVP编码结构体 char in[1024]; //输入数据缓冲区 int inl; //输入数据长度 unsigned char out[1024]; //输出数据缓冲区 int outl; //输出数据长度 FILE *infp; //输入文件句柄 FILE *outfp; //输出文件句柄 infp = fopen("test.txt","r");//打开待解码的文件 if(infp == NULL) { printf("Open File \"Test.txt\" for Read Err.\n"); return; } outfp = fopen("test-1.dat","wb");//打开解码后保存的文件 if(outfp == NULL) { printf("Open File \"test-1.txt\" For Write Err.\n"); return; } EVP_DecodeInit(ctx);//Base64解码初始化 printf("开始对文件\"Test.txt\" Base64解码...\n\n"); //循环读取原文,并调用EVP_DecodeUpdate进行Base64解码 while(1) { inl = fread(in,1,1024,infp); if(inl <= 0) break; EVP_DecodeUpdate(ctx,out,&outl,in,inl);//Base64解码 fwrite(out,1,outl,outfp);//输出到文件 } EVP_DecodeFinal(ctx,out,&outl);//完成解码,输出最后的数据。 fwrite(out,1,outl,outfp); fclose(infp); fclose(outfp); printf("对文件\"Test.txt\" Base64解码完成,保存为\"test-1.dat\"\n\n\n"); } int main() { tEVP_Encode(); tEVP_Decode(); return 0; }
使用命令gcc -o base64 base64.c -I /root/rocopenssl/include -L /root/rocopenssl/lib -lcrypto -lpthread
对其进行编译
此时,待编码的文件是test.dat,编码后的文件是test.txt,解码后的文件名是test-1.dat。
我们查看解码后的结果文件:
这篇关于基于openeuler的openssl编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?