linux下C++base64加解密与图片互转

最近由于工作需要,需要处理由http传来的base64图片数据,特此做下记录也希望能帮到更多的朋友。
部分内容参考Andy____Li 的blog:
https://blog.csdn.net/m0_37263637/article/details/79559097

1.由base64工具进行转换

用base64工具还是比较简单的,linux下应该默认装有base64工具,可输入base64 --help查看
其中 参数:

-d,--decode            //解码数据
-i,--ignore-garbag     //解码时忽略非字母字符
-w,--wrap=字符数        //在指定的字符数后自动换行(默认为76),0为禁用自动换行
 
    --help              //显示此帮助信息并退出
    --version           //显示版本信息并退出

在目录下创建测试文件test.txt,内容为:

hello word 123456

在命令行输入base64 test.txt > test.dat
可在test.dat文件中看到base64加密后的数据:
加密后图片
在输入base64 -d test.dat可见解码后的数据
在这里插入图片描述

2.代码实现base64图片转换

将一张图片转换成base64之后输出字符串的开头会有此图片的信息,

data:image/jpg;base64,

这是代表图片信息,后面的部分才是图片的内容。其中jpg/jpeg代表的就是.jpg格式,其他格式都类似,具体图片转换后的base64数据可在这个网站查看:
http://tool.chinaz.com/tools/imgtobase
我们以帅气的马爸爸为例
在这里插入图片描述
后面的部分才是图片的内容,在还原图片的时候需要去掉上面那一段内容。

base64加解密代码:

#include <iostream>
#include "common.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;

#define IMG_JPG "data:image/jpeg;base64,"	//jpg图片信息,其他类似

static const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";

static inline bool is_base64(const char c)
{
   
    return (isalnum(c) || (c == '+') || (c == '/'));
}
//加密
std::string base64_encode(const char * bytes_to_encode, unsigned int in_len)
{
   
    std::string ret;
    int i = 0;
    int j = 0;
    unsigned char char_array_3[3];
    unsigned char char_array_4[4];

    while (in_len--)
    {
   
        char_array_3[i++] = *(bytes_to_encode++);
        if(i == 
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值