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;
}
base64 - 编码解码
最新推荐文章于 2024-07-26 17:00:38 发布