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’)
 


#include <openssl/evp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void base64_encode(FILE *input, FILE *output) {
    EVP_ENCODE_CTX *ctx = EVP_ENCODE_CTX_new();
    unsigned char inbuf[512];
    unsigned char outbuf[1024];
    int inlen, outlen;
    EVP_EncodeInit(ctx);
    while ((inlen = fread(inbuf, 1, sizeof(inbuf), input)) > 0) {
        EVP_EncodeUpdate(ctx, outbuf, &outlen, inbuf, inlen);
        fwrite(outbuf, 1, outlen, output);
    }
    EVP_EncodeFinal(ctx, outbuf, &outlen);
    fwrite(outbuf, 1, outlen, output);
    EVP_ENCODE_CTX_free(ctx);
}
void base64_decode(FILE *input, FILE *output) {
    EVP_ENCODE_CTX *ctx = EVP_ENCODE_CTX_new();
    unsigned char inbuf[512];
    unsigned char outbuf[1024];
    int inlen, outlen;
    EVP_DecodeInit(ctx);
    while ((inlen = fread(inbuf, 1, sizeof(inbuf), input)) > 0) {
        EVP_DecodeUpdate(ctx, outbuf, &outlen, inbuf, inlen);
        fwrite(outbuf, 1, outlen, output);
    }
    EVP_DecodeFinal(ctx, outbuf, &outlen);
    fwrite(outbuf, 1, outlen, output);
    EVP_ENCODE_CTX_free(ctx);
}
int main(int argc, char **argv) {
    FILE *fin, *fout;
    if (argc != 4) {
        fprintf(stderr, "Usage: %s <encode/decode> <input file> <output file>\n", argv[0]);
        return 1;
    }
    fin = fopen(argv[2], "rb");
    if (!fin) {
        perror("Error opening input file");
        return 1;
    }
    fout = fopen(argv[3], "wb");
    if (!fout) {
        perror("Error opening output file");
        fclose(fin);
        return 1;
    }
    if (strcmp(argv[1], "encode") == 0) {
        base64_encode(fin, fout);
    } else if (strcmp(argv[1], "decode") == 0) {
        base64_decode(fin, fout);
    } else {
        fprintf(stderr, "Invalid operation: %s\n", argv[1]);
        fclose(fin);
        fclose(fout);
        return 1;
    }
    fclose(fin);
    fclose(fout);
    return 0;
}

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号