C++:通过openssl完成base64编解码

news/2023/6/9 19:31:20

举例如下:

#include <openssl/pem.h>
using namespace std;int openssl_base64_encode(const unsigned char* in, int inlen, char* out, int* outlen, bool newline)
{BIO* b64 = BIO_new(BIO_f_base64());BIO* bmem = BIO_new(BIO_s_mem());if (!b64 || !bmem) {fprintf(stderr, "fail to BIO_new\n");return -1;}b64 = BIO_push(b64, bmem);if (!newline)BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); // ignore newlines, write everything in one line*outlen = BIO_write(b64, in, inlen);if (*outlen <= 0 || *outlen != inlen) {fprintf(stderr, "fail to BIO_write\n");return -1;}BIO_flush(b64);BUF_MEM* buf = nullptr;BIO_get_mem_ptr(b64, &buf);*outlen = buf->length;memcpy(out, buf->data, *outlen);BIO_free_all(b64);return 0;
}int openssl_base64_decode(const char* in, int inlen, unsigned char* out, int* outlen, bool newline)
{BIO* b64 = BIO_new(BIO_f_base64());BIO* bmem = BIO_new_mem_buf(in, inlen);if (!b64 || !bmem) {fprintf(stderr, "fail to BIO_new\n");return -1;}b64 = BIO_push(b64, bmem);if (!newline)BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); // ignore newlines, write everything in one line*outlen = BIO_read(b64, out, inlen);if (*outlen <= 0) {fprintf(stderr, "fail to BIO_read\n");return -1;}BIO_free_all(b64);return 0;
}void base64_test()
{char jwtHeader[] = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9";printf("jwt header origin:%s\n", jwtHeader);unsigned char jwtDecode[256] = {0};int jwtDecodeLen = 0;openssl_base64_decode(jwtHeader, strlen(jwtHeader), jwtDecode, &jwtDecodeLen, false);jwtDecode[jwtDecodeLen] = '\0';printf("jwt header decode:%s\n", jwtDecode);char jwtEncode[256] = {0};int jwtEncodeLen = 0;openssl_base64_encode(jwtDecode, strlen((char*)jwtDecode), jwtEncode, &jwtEncodeLen, false);jwtEncode[jwtEncodeLen] = '\0';printf("jwt header encode:%s\n", jwtEncode);
}int main()
{base64_test();  return 0;
}

编译时需要加上链接库参数:-lssl -lcrypto

运行程序输出:
jwt header origin:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
jwt header decode:{"alg":"HS256","typ":"JWT"}
jwt header encode:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

注:base64编码后的字符串长度的计算方法为:向上取整(原始字节数 / 3) * 4

也就是:base64_len = ( strlen(str_in)/3 + 1) * 4;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4575382.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

【初识C语言】简单计算n的阶乘以及多个数字的阶乘求和

hello&#xff0c;大家好&#xff01;我依旧是你们熟悉的那个集美貌与智慧于一身的槿凉。那么今天就给大家介绍一下在C语言的分支循环里面阶乘的求解方法&#xff0c;废话不多说&#xff0c;我们直接步入正题。 一&#xff1a;计算n的阶乘 #include <stdio.h> int main(…

java计算一个数的阶乘之和_Java编写程序之输入一个数字实现该数字阶乘的计算...

需求说明&#xff1a;编写java程序&#xff0c;输入一个数字&#xff0c;实现该数字阶乘的计算。一个数字的阶乘是所有小于及等于该数的正整数的积&#xff0c;自然数n的阶乘写作n! 。例如&#xff0c;5的阶乘等于1*2*3*4*5&#xff0c;表示为5! 120。实现思路&#xff1a;声明…

这份数据分析规范,写的很好。

来源&#xff1a;趣店技术团队在数据分析中&#xff0c;无论数据收集过程有多么科学、数据处理多么先进、分析方法多么高深&#xff0c;如果不能将它们有效地组织和展示出来&#xff0c;并与决策者进行沟通与交流&#xff0c;就无法体现数据和分析的价值。因此&#xff0c;分析…

【干货】数据分析规范总结!

Datawhale干货 作者&#xff1a;吴迪-趣店数据分析师&#xff0c;来源&#xff1a;大数据DT导读&#xff1a;在数据分析中&#xff0c;无论数据收集过程有多么科学、数据处理多么先进、分析方法多么高深&#xff0c;如果不能将它们有效地组织和展示出来&#xff0c;并与决策者进…

专业的数据分析报告应该这么写!

作者&#xff1a;吴迪「趣店数据分析师」来源&#xff1a;趣店技术团队能不能写一份优秀的分析报告&#xff0c;是衡量分析师是否牛X的重要标准。除了不同场景下特定的分析逻辑&#xff0c;怎么把分析报告写的更好&#xff0c;其实是有成体系方法论的。今天给大家分享一篇关于数…

数据分析报告,这么写就对了

作者&#xff1a;吴迪「趣店数据分析师」 来源&#xff1a;趣店技术团队哈喽大家好&#xff0c;我是可乐能不能写一份优秀的分析报告&#xff0c;是衡量分析师是否牛X的重要标准。除了不同场景下特定的分析逻辑&#xff0c;怎么把分析报告写的更好&#xff0c;其实是有成体系…

数据分析规范总结!

导读&#xff1a;在数据分析中&#xff0c;无论数据收集过程有多么科学、数据处理多么先进、分析方法多么高深&#xff0c;如果不能将它们有效地组织和展示出来&#xff0c;并与决策者进行沟通与交流&#xff0c;就无法体现数据和分析的价值。因此&#xff0c;分析报告实质上是…

java.lang.UnsupportedOperationException: Required method destroyItem was not overridden

使用ViewPager 的时候出现这样的错误 错误的处理方法 是 把destroyItem 注释掉