1. 程式人生 > 其它 >樹莓派openeuler安裝openssl及其實踐

樹莓派openeuler安裝openssl及其實踐

樹莓派openssl實踐

安裝openssl原始碼

安裝地址:openssl-3.0.0

建立兩個資料夾,分別放置OpenSSL的原始碼和安裝路徑:
mkdir rocopensslsrc rocopenssl

使用scp D:/樹莓派/openssl-3.0.0.tar.gz [email protected]:/root/rocopenssl將原始碼傳輸至樹莓派中

解壓原始碼到rocopensslsrc資料夾:
tar -zxvf openssl-3.0.0.tar.gz -C /root/rocopensslsrc

配置編譯安裝路徑(/root/rocopenssl),和openEuler系統預設的不同。

cd rocopensslsrc/openssl-3.0.0
./config --prefix=/root/rocopenssl

編譯(make時間稍長,耐心等待),測試、安裝,其中測試步驟可選:

make
make test
make install

make了快一個小時

檢視openssl

使用openssl version檢視openssl版本

openssl help檢視openssl幫助文件:


openssl計算摘要

把besti放到besti.txt檔案中,計算檔案的摘要:

echo "besti" >> besti.txt


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 /root/rocopenssl/include -L /root/rocopenssl/lib -lcrypto -lpthread

<openssl/evp.h>標頭檔案缺失,openeuler系統傳統藝能了。

sudo yum install openssl-devel

使用該指令安裝相關檔案:

編譯成功:

執行./to;echo $?,結果列印0.


BASE64演算法

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

void tEVP_Encode()
{
	EVP_ENCODE_CTX *ctx;
        ctx = EVP_ENCODE_CTX_new();	
	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);
	printf("file\"Test.dat\" after Base64 coding:\n");

	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("file \"Test.dat\" Base64 coding is finish,save to \"test.txt\"檔案.\n\n\n");
}

void tEVP_Decode()
{
	EVP_ENCODE_CTX *ctx;
        ctx = EVP_ENCODE_CTX_new();			
	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);
	printf("start file \"Test.txt\" Base64 decoding...\n\n");

	while(1)
	{
		inl = fread(in,1,1024,infp);
		if(inl <= 0)
			break;
		EVP_DecodeUpdate(ctx,out,&outl,in,inl);
		fwrite(out,1,outl,outfp);
	} 
	EVP_DecodeFinal(ctx,out,&outl);
	fwrite(out,1,outl,outfp);
	fclose(infp);
	fclose(outfp);	
	printf("file \"Test.txt\" Base64 decoding is finish,save as \"test-1.dat\"\n\n\n");
	
}
 
int main()
{
 
	tEVP_Encode();
	tEVP_Decode();
	
	return 0;
}

使用gcc -o testbase64 testbase64.c -I /root/rocopenssl/include -L /root/rocopenssl/lib -lcrypto -lpthread
編譯成功:

執行截圖: