乐趣区

关于base64:Base64加解密实现

一、阐明

1、base64

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

2、转换的思路

加密思路

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

解密思路

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

二、术语和参考资料

ASCII 对照表


Base64 表

三、整体设计

1、类接口

#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

https://download.csdn.net/dow…

退出移动版