樹莓派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
編譯成功:
執行截圖: