Base64加解密实现

一、说明

1、base64

Base64是一种基于64个可打印字符来表示二进制数据的编码方式,是从二进制数据到字符的过程。常用于数据存储、或者传输,与其说是加解密方法,编码方法更适合形容base64。

2、转换的思路

加密思路

1)base64的编码都是按字符串长度,以每3个8bit的字符为一组
2)针对每组,获取每个字符的ASCII编码
3)将ASCII编码转成8bit的二进制
4)划分为每6bit一组,默认最高2位为00,这样就能38转成46
5)将4*6的每一组转为10进制,对照Base64表得到最终的编码结果
6)每76个字符加一个换行符
7)最后的结束符需要处理一下

解密思路

1)对照Base64表将对应字符转为码值
2)将码值转为二进制,每8bit表示一个字符
3)将8bit转为16进制
4)对照ASCII表,获取值

二、术语和参考资料

ASCII对照表

ACII控制字符

ASCII可显示字符

Base64表

Base64编码表

三、整体设计

类接口

#pragma once

class CBase64Code
{
public:
    CBase64Code();
    ~CBase64Code();

public:
    //获取base64加密后的内容
    std::string GetBase64Code(const void* pData, int nLen);

    //对内容进行解密
    BOOL DecodeBase64Data(const std::string& strDecodeData, int nDataSize, void** ppData);

private:

    //base64编码
    int _Base64Encode(const char *pcszIn, int nInSize, char *pszOut, int nOutSizeMax, int *pnReturnSize, int nNeedCRLF);

    //base64解码
    int _Base64Decode(const char *pcszIn, int nInSize, char *pszOut, int nOutSizeMax, int *pnReturnSize);
};

四、示例

1、对字符’j’进行加密

1)查看ASCII表,得到二进制为
01101010
2)Base64每3个8bit一组,补全为
01101010 00000000 00000000
3)划分为4*6,得到
011010 100000 000000 000000
4)转为10进制
26 32 0 0
5)对照Base64表,得到编码后的数据为
a g = =
6)所以"j"经过Base64编码后的数据为
ag==

2、对"ag=="进行解密

1)对照Base64表,得到
26 32 0 0
2)转为二进制
011010 100000 000000 000000
3)转为3*8
01101010 00000000 00000000
4)转为10进制
106 0 0
5)对照ASCII表
j

注意

1、进行base64加密时,按实际内容长度进行加密即可,若加字节对齐可能造成内存越界崩溃
示例:https://download.csdn.net/download/m0_48073095/18146620

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值