base64

来源:互联网 发布:mac磁盘分区失败 编辑:程序博客网 时间:2024/06/06 01:41

基于:openssl-1.0.1g

int openssl_base64_encode(const uint8_t *in, uint32_t in_len, uint8_t *out, uint32_t *out_len){    int ret = 0;    BIO * bmem = NULL;    BIO * b64 = NULL;    BUF_MEM * bptr = NULL;    if ((NULL == in) || (NULL == out) || (NULL == out_len) || (0 == in_len))    {        printf("%s-%d:input paraments error!\n", __FUNCTION__, __LINE__);        return -1;    }    b64 = BIO_new(BIO_f_base64());    bmem = BIO_new(BIO_s_mem());    b64 = BIO_push(b64, bmem);        // if no set, each 64 bytes will add '\n', the end of string will add '\n' too. this will result base64 cannot decode.    BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);    BIO_write(b64, in, in_len);    ret = BIO_flush(b64);    if (0 != ret)    {        /*remove Warming Error*/    }    BIO_get_mem_ptr(b64, &bptr);    /*    if (bptr->length > *out_len)    {        printf("encode length too small!\n");        return -1;    }    */    *out_len = bptr->length;    memcpy(out, bptr->data, bptr->length);    BIO_free_all(b64);    return 0;}int openssl_base64_decode(const uint8_t *in, uint32_t in_len, uint8_t *out, uint32_t *out_len){    BIO * bmem = NULL;    BIO * b64 = NULL;    if ((NULL == in) || (NULL == out) || (NULL == out_len) || (0 == in_len))    {        printf("%s-%d:input paraments error!\n", __FUNCTION__, __LINE__);        return -1;    }    b64 = BIO_new(BIO_f_base64());    BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);    bmem = BIO_new_mem_buf((void *)in, in_len);    bmem = BIO_push(b64, bmem);        *out_len = BIO_read(bmem, out, in_len);    out[*out_len] = 0;    BIO_free_all(b64);    return 0;}