OpenEuler树莓派基础实验
1.任务详情
1. 参考https://www.cnblogs.com/rocedu/p/14615565.html 完成OpenEuler的安装,提交过程博客和截图
2. 参考https://www.cnblogs.com/rocedu/p/14617763.html完成OpenSSL的安装,并测试,提交代码截图
3. 参考附件,至少完成第三章的实验,提交过程博客链接
2.树莓派Openeuler安装
在安装开始前,需要获取Openeuler发布的树莓派镜像文件及其校验文件。
1.访问
社区获取下载链接。
2.单击上方“下载”中的“镜像列表”。
3.找到自己能够访问的镜像节点,这里我进入的是北京的节点,选择一个最新的镜像文件。
3.单击“raspi_img”,进入树莓派镜像的下载列表。(aarch64:AArch64 架构的镜像)
4.下载镜像文件和镜像校验文件。
5.对镜像文件的完整性进行校验,操作步骤如下:
-
获取校验文件中的校验值。执行命令如下:
[Linux]$ cat *.img.sha256sum [Windows]> type *.img.sha256sum
-
计算文件的 sha256 校验值。执行命令如下:
[Linux]$ *.img [Windows]> *.img SHA256
-
对比步骤 1 和步骤 2 计算的校验值是否一致。
如果校验值一致说明下载的文件完整性没有破坏,如果校验值不一致则可以确认文件完整性已被破坏,需要重新获取。
2.烧写镜像文件
安装成功,使用ssh登录
3.安装openssl
在安装开发工具的时候应该一起安装好了
测试
openssl编程
测试代码
#include <stdio.h>
#include <openssl/evp.h>
int main(){
OpenSSL_add_all_algorithms();
return 0;
}
编译时出现错误:
原因:你尝试编译的程序使用OpenSSL,但是需要和OpenSSL链接的文件(库和头文件)在你Linux平台上缺少。
解决方法:安装OpenSSL开发包
sudo dnf install openssl-devel
再次尝试编译,成功。
base64算法
测试代码:
#include <stdio.h>
#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.
");
return;
}
outfp = fopen("test.txt","w");//打开编码后保存的文件
if(outfp == NULL)
{
printf("Open File "test.txt" For Write Err.
");
return;
}
EVP_EncodeInit(ctx);//Base64编码初始化
printf("文件"Test.dat" Base64编码后为:
");
//循环读取原文,并调用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"文件.
");
}
//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.
");
return;
}
outfp = fopen("test-1.dat","wb");//打开解码后保存的文件
if(outfp == NULL)
{
printf("Open File "test-1.txt" For Write Err.
");
return;
}
EVP_DecodeInit(ctx);//Base64解码初始化
printf("开始对文件"Test.txt" Base64解码...
");
//循环读取原文,并调用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"
");
}
int main()
{
tEVP_Encode();
tEVP_Decode();
return 0;
}
编译结果如下:编译不支持gbk,所以删除掉将源码编码成gbk即可
通过echo命令写二进制文件,参考如下
4.安装zsh
参考以下博客,安装zsh
5.实验指导书
详情见