Base64加密解密原理

(首先,吐槽一下这里空格和Tab会被过滤,格式可能不好看)
一. Base64字符的组成部分(顿号为分隔符):
A-Z、a-z、0-9、+、/
26 + 26 + 10 + 2 = 64
二.Base64表

三.加密原理:
1.先将每三个字符分离,最后有可能剩0个或者1个或者2个字符。
2.整三个:将三个字符转换为ascii二进制码,得到24bit(3*8bit),然后再按顺序分为4份(每6bit为一份)。最后,将这四份二进制转换为4份十进制,再按照Base64字符表转为4个字符。
2.分离后剩1个字符:将这一个字符转换为ascii二进制码,先切一个6bit还剩2bit,再将这2bit后面补4个0。最后,将这两份二进制转换为2份十进制,再按照Base64字符表转为2个字符,后面再补两个等于号(这里两个等号打不出来)。
2.分离后剩2个字符:将这一个字符转换为ascii二进制码,先切两个6bit还剩4bit,再将这2bit后面补2个0。最后,将这三份二进制转换为3份十进制,再按照Base64字符表转为3个字符,后面再补一个等于号(=)。
3.Base64对于中文的不同编码可能会出现不同的结果,具体要看中文用的是什么编码。
四.实例:
1.整三个
p h p
对应ASCII: 01110000 01101000 01110000
每6位分割: 011100 000110 100001 110000 |
对应10进制值: 28 6 33 48
Base64对应的字符:c G h w
结果: php = cGhw(base64)
2.分离后剩1个字符
r a n l
ASCII值:01110010 01100001 01101110 01101100
每6位分割:011100 100110 000101 101110 | 011011 00 0000 xxxxxx xxxxxx |
对应10进制值:28 38 5 46 27 0 = =
对应base64字符: c m F u b A = =
结果: ranl = 'cmFubA=='(base64)
3.分离后剩2个字符
h a c k e
ASCII值: 01101000 01100001 01100011 01101011 01100101
每6位分割: 011010 000110 000101 100011 | 011010 110110 0101 00 xxxxxx |
对应10进制值: 26 6 5 35 26 54 20 =
对应base64字符: a G F j a 2 U =
结果: hacke = 'aGFja2U='(base64)
五.解密:
看懂加密,解密就是加密的逆向,这里要强调的是:Base64解密也是靠着Base64表解密的,如果碰到不在Base64表的字符(空格,<,>,等等),将会跳过这些字符,仅将在表内的字符组成一个新的字符串进行解码。

posted @ 2021-03-13 16:31  plesesmile  阅读(1311)  评论(0编辑  收藏  举报