简单的base64解码不起作用:(

问题描述

| 我一直在尝试使用以下代码对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