问题描述
|
我一直在尝试使用以下代码对base *输入char *进行base64解码。
\“ msg \”的值似乎是一个空字符串:(
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <openssl/bn.h>
#include <openssl/bio.h>
#include <openssl/objects.h>
#include <openssl/pem.h>
#include <openssl/objects.h>
// reads b64 encoded msg (pReadBuffer) and writes to pWriiteFile.
char * dgstdecode(char *pReadBuffer,int pLength)
{
char *msg = (char *)malloc(pLength);
memset(msg,0x00,pLength);
int readbytes = -1;
printf(\"inside dgstdecode\\n\");
printf(\"\\n pReadBuffer = %s \\n\",pReadBuffer);
BIO *b64,*bio = NULL;
b64 = BIO_new(BIO_f_base64());
bio = BIO_new_mem_buf(pReadBuffer,pLength);
bio = BIO_push(b64,bio);
//BIO_set_flags(bio,BIO_FLAGS_BASE64_NO_NL);
while ((readbytes = BIO_read(bio,msg,pLength)) > 0)
{
printf(\"readbytes: %d\\n\",readbytes);
printf(\"inside dgstdecode\\n\");
}
BIO_flush(bio);
printf(\"msg = %s\\n\",msg);
BIO_free_all(bio);
//BIO_free_all(b64);
return msg;
}
int main(int argc,char *argv[])
{
int i = 0;
char buff [9] =\"aGVsbG8K\" ;
//memset(buff,9);
char* ptr ;
ptr = (char*)malloc(9);
for(i =0;i < 4; i++){
buff[9] = \'\\0\';
printf(\"strlen buff = %d\\n\",strlen(buff));
ptr = dgstdecode(buff,9);
printf(\"ptr = %s\\n\",ptr);
}
return 0;
}
解决方法
对不起!这是正确的方法。我刚刚清理了主要功能:
int main(int argc,char *argv[])
{
int i = 0;
char buff [] =\"aGVsbG8K\\n\\0\" ;
char* ptr ;
for(i =0;i < 4; i++){
printf(\"strlen buff = %d\\n\",strlen(buff));
ptr = dgstdecode(buff,strlen(buff));
printf(\"ptr = %s\\n\",ptr);
printf(\"\\n\");
}
return 0;
}
我的输出现在是(仍在删除/ n东西):
迷迷状态= 9
内部dgstdecode
pReadBuffer = aGVsbG8K
读取字节数:6
内部dgstdecode
msg =你好
ptr =你好
迷迷状态= 9
内部dgstdecode
pReadBuffer = aGVsbG8K
读取字节数:6
内部dgstdecode
msg =你好
ptr =你好
迷迷状态= 9
内部dgstdecode
pReadBuffer = aGVsbG8K
读取字节数:6
内部dgstdecode
msg =你好
ptr =你好
迷迷状态= 9
内部dgstdecode
pReadBuffer = aGVsbG8K
读取字节数:6
内部dgstdecode
msg =你好
ptr =你好
忽略我的原始回复如下:
bio = BIO_push(b64,bio);
线似乎是罪魁祸首。它似乎覆盖了参考。这是我注释掉该行后的输出(编辑器似乎删除了一些/ n \):
strlen buff = 8
inside dgstdecode
pReadBuffer = aGVsbG8K
readbytes: 9
inside dgstdecode
msg = aGVsbG8K
ptr = aGVsbG8K
strlen buff = 8
inside dgstdecode
pReadBuffer = aGVsbG8K
readbytes: 9
inside dgstdecode
msg = aGVsbG8K
ptr = aGVsbG8K
strlen buff = 8
inside dgstdecode
pReadBuffer = aGVsbG8K
readbytes: 9
inside dgstdecode
msg = aGVsbG8K
ptr = aGVsbG8K
strlen buff = 8
inside dgstdecode
pReadBuffer = aGVsbG8K
readbytes: 9
inside dgstdecode
msg = aGVsbG8K
ptr = aGVsbG8K