实验一 密码引擎-1-OpenEuler-OpenSSL编译

0. 安装Ubuntu和OpenEuler虚拟机

1. 下载最新的OpenSSL源码(3.2.1版本)

2. 用自己的8位学号建立一个文件夹,cd 你的学号,用pwd获得绝对路径

3. 参考https://www.cnblogs.com/rocedu/p/5087623.html先在Ubuntu中完成OpenSSL编译安装,然后在OpenEuler中重现

    ./config  --prefix=..(学号目录的绝对路径)指定OpenSSL编译链接

4. 提交 test_openssl.c 编译运行截图

5. 加分项:在Windows中编译OpenSSL,记录编译过程,提交相关文档(推荐MarkDown格式)

-0.安装成功:

-1.下载成功:

-2.在Ubuntu中完成OpenSSL编译安装:

-3.在OpenEuler中重现:


-4.提交 test_openssl.c 编译运行截图:

4.1:Ubuntu:

4.2:open Euler:

-5.在Windows中编译OpenSSL,记录编译过程,提交相关文档:

加分项:在Windows中编译OpenSSL,记录编译过程,提交相关文档(推荐MarkDown格式)

image

链接openssl设置

image

image

image

编译运行

image

OpenSSL 使用 base64 编码/解码

#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/buffer.h>
#include <string.h>
#include <iostream>

using namespace std;

char * base64Encode(const char *buffer, int length, bool newLine);
char * base64Decode(char *input, int length, bool newLine);

int main(int argc, char* argv[])
{
	bool newLine = false;
	string input = "Hello World!";

	char * encode = base64Encode(input.c_str(), input.length(), newLine);
	char * decode = base64Decode(encode, strlen(encode), newLine);

	cout << "Base64 Encoded : " << encode << endl;
	cout << "Base64 Decoded : " << decode << endl;

	cin.get();
	return 0;
}

// base64 编码
char * base64Encode(const char *buffer, int length, bool newLine)
{
	BIO *bmem = NULL;
	BIO *b64 = NULL;
	BUF_MEM *bptr;

	b64 = BIO_new(BIO_f_base64());
	if (!newLine) {
		BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
	}
	bmem = BIO_new(BIO_s_mem());
	b64 = BIO_push(b64, bmem);
	BIO_write(b64, buffer, length);
	BIO_flush(b64);
	BIO_get_mem_ptr(b64, &bptr);
	BIO_set_close(b64, BIO_NOCLOSE);

	char *buff = (char *)malloc(bptr->length + 1);
	memcpy(buff, bptr->data, bptr->length);
	buff[bptr->length] = 0;
	BIO_free_all(b64);

	return buff;
}

// base64 解码
char * base64Decode(char *input, int length, bool newLine)
{
	BIO *b64 = NULL;
	BIO *bmem = NULL;
	char *buffer = (char *)malloc(length);
	memset(buffer, 0, length);
	b64 = BIO_new(BIO_f_base64());
	if (!newLine) {
		BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
	}
	bmem = BIO_new_mem_buf(input, length);
	bmem = BIO_push(b64, bmem);
	BIO_read(bmem, buffer, length);
	BIO_free_all(bmem);

	return buffer;
}

输出如下所示:

Base64 Encoded : SGVsbG8gV29ybGQh
Base64 Decoded : Hello World!

image

posted @ 2024-03-27 19:05  6666666mjz  阅读(34)  评论(0)    收藏  举报