Base64会使用一串固定编码,其标准为:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
这称为base64编码表,当然,该表不一定是固定的,可以自定义编码表,理解原理之后会很容易理解置换表的规则,因为base64加密靠的就是置换规则,而置换规则从base64置换表而来
原文经过加密会产生一系列索引,利用索引在这串固定编码中寻找对应的字符。
一开始先将需要加密的字符转为ASCII码对应的二进制,经过如下的替换规则后,将替换后每个字符对应的的二进制串再base64编码表中找对应字符替换
划分成6bit因为2的6次方为64,正好都在base64编码表中找到对应的字符
关于"="问题:因为每三个字符转换完后应变成四个,最后不足三个字符的情况也应变成四个,于是就产生了最后不补足"0"加"="的问题,如图:
理解了加密规则后,下面编写C和python代码
编写C代码之前,我们应该明确一件事情:
在表示byte时,不用char 而用 unsinged char
这是因为:
char与unsigned char都占用一个字节(8bit)的内存,unsigned char无符号位,byte也无符号位这一说法。但是将byte的值取出赋值给int,long等其它类型时,系统会最高位进行扩展。如果使用符号类型(char),则以符号位(最高位)扩展,会造成数据错误;如果使用无符号类型(unsigned char),则以零扩展,并不会造成数据错误。因此常用unsigned char常用来表示byte。
C语言代码如下(全部放出来过于冗杂,放上他人写的代码):
https://www.iteye.com/blog/lindexi-2378058
Python有现成的库可以调用,编解码直接使用库函数就可以
import base64
#编码
e64=base64.b64encode(" ".encode("utf-8"))
print(str(e64,"utf-8"))
#解码
s=" "
d64 = base64.b64decode(s)
print(d64)
倘若看了本文没有弄懂base64编码原理,可以看此篇详细原理:
一篇文章彻底弄懂Base64编码原理_程序新视界的博客-CSDN博客_base64编码
原理图片参考博客:C语言实现Base64编解码(加密和解密)_叶落花枯的博客-CSDN博客_c语言转base64
符号位扩展参考博客:
感觉还可以就点个赞吧~~~~~~~