• OpenSSL测试-Base64


    0. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
    1. 使用工具(如bc,计算机器等)把自己学号转化为16进制,提交转化过程和结果截图(2‘) 
    2. 使用工具(如echo -e, ultraedit等)把上面转化的结果写入二进制文件“你的学号.dat”中,并用工具`od -tx1 你的学号.dat`,提交命令运行(3’)
    3. 使用OpenSSL的base64命令对"你的学号.dat"进行编码解码,提交过程截图(5')
    4. 使用OpenSSL编程对"你的学号.dat"进行编码解码,提交代码和运行结果截图。(10’)

    本次测试我选择在Ubuntu中完成下面任务

    1、使用工具(如bc,计算机器等)把自己学号转化为16进制,提交转化过程和结果截图

    由此可以我学号的16进制为133F13D

    2、使用工具(如echo -e, ultraedit等)把上面转化的结果写入二进制文件“你的学号.dat”中,并用工具od -tx1 你的学号.dat,提交命令运行

    3、使用OpenSSL的base64命令对"你的学号.dat"进行编码解码,提交过程截图

    4、使用OpenSSL编程对"你的学号.dat"进行编码解码,提交代码和运行结果截图。

    代码:

    #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("20181309.bat","rb");//打开待编码的文件

    ​ if(infp == NULL)

    ​ {

    ​ printf("Open File "20181309.bat" 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("文件"20181309.bat" 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("对文件"20181309.bat" 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;

    }



  • 相关阅读:
    面试题25二叉树中和为某一值得路径+递归函数详细解析
    [Codeforces 1199D]Welfare State(线段树)
    [Codeforces 1199C]MP3(离散化+二分答案)
    [Codeforces 1191D] Tokitsukaze, CSL and Stone Game(博弈论)
    [Codeforces 639F] Bear and Chemistry (Tarjan+虚树)(有详细注释)
    [HDU5807] [BestCoder Round #86 1004] Keep In Touch (DP)
    [Codeforces712D] Memory and Scores(DP+前缀和优化)(不用单调队列)
    [Codeforces722E] Research Rover (dp+组合数学)
    [POJ3612] Telephone Wire(暴力dp+剪枝)
    [Codeforces600E] Lomsat gelral(树上启发式合并)
  • 原文地址:https://www.cnblogs.com/20181309lzy/p/14733729.html
Copyright © 2020-2023  润新知