使用C++实现base64伪加密
base64
编码原理
将其它编码转化为如下编码
Value | Char | Value | Char | Value | Char | Value | Char |
---|---|---|---|---|---|---|---|
0 | A | 16 | Q | 32 | g | 48 | w |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | i | 50 | y |
3 | D | 19 | T | 35 | j | 51 | z |
4 | E | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | l | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | I | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | p | 57 | 5 |
10 | K | 26 | a | 42 | q | 58 | 6 |
11 | L | 27 | b | 43 | r | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | t | 61 | 9 |
14 | O | 30 | e | 46 | u | 62 | + |
15 | P | 31 | f | 47 | v | 63 | / |
步骤:
- 将所有字符转化为ASCII码
- 将ASCII码转化为8位二进制
- 每3位ASCII码(即24位二进制)为一组,最后一组若不足24位,则补0补齐
- 重新分组,每6位二进制为一个字符,对应上表的字符($2^6-1=63$)
- 最后一组若有字符的值为0,且其6位二进制都是补0补足的,则其所对应的字符为
=
而不是A
示例:(有一定的规律)
- 输入:
a
- 转化为二进制:
01100001
(8位) - 补0:
01100001 00000000 00000000
补了16个0 - 分组:
011000 010000 000000 000000
(后两个字符不是AA
,是==
,0全部是补足的) - 对应的base64编码:
YQ==
- 输入:
abc
- 二进制:
01100001 01100010 01100011
- 不需要补0
- 分组:
011000 010110 001001 100011
- 对应base64编码:
YWJj
- 输入:
abcde
- 二进制:
01100001 01100010 01100011 01100100 01100101
- 补0:
01100001 01100010 01100011 01100100 01100101 00000000
补了8个0 - 分组:
011000 010110 001001 100011 011001 000110 010100 000000
最后一个分组的0都是补足的 - 对应base64编码:
YWJjZGU=
代码实现
1 | //base64.cpp |
在linux上使用g++
编译链接
1 | yang@Ubuntu18:~$ g++ -o base64 base64.cpp |