gpt4 book ai didi

c - 使用 libssl 的错误 Base64 编码

转载 作者:行者123 更新时间:2023-12-04 11:44:57 24 4
gpt4 key购买 nike

假设以下代码,我的 base64 编码中有奇怪的错误。

#include <openssl/bio.h>
#include <openssl/buffer.h>
#include <stdio.h>
#include <string.h>

char * base64(unsigned char * input, int length) {

BIO *b64 = NULL;
BIO * bmem = NULL;
BUF_MEM *bptr = NULL;
char * output = NULL;

b64 = BIO_new((BIO_METHOD *)BIO_f_base64());
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
bmem = BIO_new(BIO_s_mem());
b64 = BIO_push(b64, bmem);
BIO_write(b64, input, length);
BIO_flush(b64);
BIO_get_mem_ptr(b64, &bptr);

output = (char *) calloc (bptr->length, sizeof(char));
memcpy(output, bptr->data, bptr->length);

BIO_free_all(b64);

return output;
}


int main(int argc, char *argv[]) {


char * based_string = NULL;

based_string = base64(argv[1], strlen(argv[1]));
printf("%s\n", based_string);
free(based_string);
return 0;
}

我用 gcc test.c -o test -lcrypto 编译它

如果我运行:

./测试睾丸

我在结果中有 dGVzdHRlcw==�.. 而不是 dGVzdHRlcw==

如果我运行:

./test测试

我有 dGVzdA== 作为返回,这是好的结果。

之前的源码有什么问题。

最佳答案

output = (char *) calloc (bptr->length + 1, sizeof(char));

您缺少“+1”,因此缓冲区中没有空间用于空终止符。

关于c - 使用 libssl 的错误 Base64 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3711591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com