2021-05-06

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#include <stdio.h>
#include <string.h>
#include
#include
#include <openssl/bio.h>
#include <openssl/evp.h>
#include <openssl/buffer.h>
#include <stdint.h>
#include <assert.h>

size_t calcDecodeLength(const char* b64input) { //Calculates the length of a decoded string
size_t len = strlen(b64input),
padding = 0;

if (b64input[len-1] == '=' && b64input[len-2] == '=') //last two chars are =
	padding = 2;
else if (b64input[len-1] == '=') //last char is =
	padding = 1;

return (len*3)/4 - padding;

}

int Base64Decode(char* b64message, char** buffer, size_t* length) { //Decodes a base64 encoded string
BIO *bio, *b64;

int decodeLen = calcDecodeLength(b64message);
*buffer = (char*)malloc(decodeLen + 1);
(*buffer)[decodeLen] = '\0';

bio = BIO_new_mem_buf(b64message, -1);
b64 = BIO_new(BIO_f_base64());
bio = BIO_push(b64, bio);

BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); //Do not use newlines to flush buffer
*length = BIO_read(bio, *buffer, strlen(b64message));
assert(*length == decodeLen); //length should equal decodeLen, else something went horribly wrong
BIO_free_all(bio);

return (0); //success

}

int Base64Encode(const char* buffer, size_t length, char** b64text) { //Encodes a binary safe base 64 string
BIO *bio, *b64;
BUF_MEM *bufferPtr;

b64 = BIO_new(BIO_f_base64());
bio = BIO_new(BIO_s_mem());
bio = BIO_push(b64, bio);

BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); //Ignore newlines - write everything in one line
BIO_write(bio, buffer, length);
BIO_flush(bio);
BIO_get_mem_ptr(bio, &bufferPtr);
BIO_set_close(bio, BIO_NOCLOSE);
BIO_free_all(bio);

*b64text=(*bufferPtr).data;

return (0); //success

}

using namespace std;
int main() {
//Encode To Base64
char* base64EncodeOutput;
string text;
cout<<“输入要加密的数据”<<endl;
getline(cin,text);
Base64Encode(text.c_str(), text.length(), &base64EncodeOutput);
printf(“加密输出(base64): %s\n”, base64EncodeOutput);

//Decode From Base64
char* base64DecodeOutput;
size_t test;
Base64Decode(base64EncodeOutput, &base64DecodeOutput, &test);
printf(“解密输出: %s 长度:%d\n”, base64DecodeOutput, test);

return(0);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值