OpenEuler树莓派基础实验

# 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.单击上方“下载”中的“镜像列表”。

image-20211019140925260

3.找到自己能够访问的镜像节点,这里我进入的是北京的节点,选择一个最新的镜像文件。

image-20211019143349450

image-20211019143459055

3.单击“raspi_img”,进入树莓派镜像的下载列表。(aarch64:AArch64 架构的镜像)

image-20211019143903435

4.下载镜像文件和镜像校验文件。

image-20211019144013483

5.对镜像文件的完整性进行校验,操作步骤如下:

  1. 获取校验文件中的校验值。执行命令如下:

    [Linux]$ cat *.img.sha256sum
    
    [Windows]> type *.img.sha256sum
    
  2. 计算文件的 sha256 校验值。执行命令如下:

    [Linux]$ *.img
    
    [Windows]> *.img SHA256
    
  3. 对比步骤 1 和步骤 2 计算的校验值是否一致。

    如果校验值一致说明下载的文件完整性没有破坏,如果校验值不一致则可以确认文件完整性已被破坏,需要重新获取。

image-20211019144837086

2.烧写镜像文件

image-20211019150048211

安装成功,使用ssh登录

image-20211027210524111

3.安装openssl

在安装开发工具的时候应该一起安装好了

image-20211027210852866

测试

image-20211028104145674

openssl编程

测试代码

#include <stdio.h>
#include <openssl/evp.h>

int main(){
	
    OpenSSL_add_all_algorithms();
	
    return 0;
}


编译时出现错误:

image-20211028104534031

原因:你尝试编译的程序使用OpenSSL,但是需要和OpenSSL链接的文件(库和头文件)在你Linux平台上缺少。

解决方法:安装OpenSSL开发包

sudo dnf install openssl-devel

再次尝试编译,成功。

image-20211028105056414

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.\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;
}

编译结果如下:编译不支持gbk,所以删除掉将源码编码成gbk即可

image-20211028111338386

通过echo命令写二进制文件,参考如下: https://blog.csdn.net/ustccw/article/details/79038269

image-20211028151101753

4.安装zsh

参考以下博客,安装zsh:https://www.jianshu.com/p/1df9df37ef34

5.实验指导书

详情见:https://www.cnblogs.com/sisterben/p/15490021.html

posted @ 2021-10-28 15:20  20191310李烨龙  阅读(45)  评论(0编辑  收藏  举报