VB使用Base64编码
作者:陈新龙
来源:《电脑报》2021年第47期
        现有的字符集非常多,常用的有ASCII、UTF-8、GBK等。ASCII编码是美国信息交换标准代码的简称,它是现今最通用的单字节编码系统,只定义了128个字符。其他的编码内容更丰富,容量也更大。
        在各种信息传输渠道中并不能很好地支持所有的编码,比如在邮件传输中就不支持ASCII编码中的控制字符。连最通用的ASCII编码都不能完全支持,其他编码我们就更无法保证信息传输的完整性了。
        为了保证各种信息传输渠道都能正确识别信息,Base64编码诞生了。Base64是一种用64个字符来表示任意二进制数据的方法,将二进制数据转变为64个“可打印字符”。它是一种编码方式,而非加密方式。
        Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据前需要将二进制数据转换为字符数据。
        然而简单的直接转换是不够的,因为网络传输只能传输可打印字符。这64个字符中包括大小写字母、数字、+和/,还有用来补缺的特殊字符=(图1)。
        以在VB中將ASCII编码进行Base64编码和解码为例。Base64有64个字符,2^6=64。所以用一个6位的二进制数来表示一个Base64编码表就够了。
        如果有3个字节(3×8=24)共计24位的二进制数,就刚好可以用4位(4×6=24)Base64字符来表示。
        ASCII编码转Base64编码流程的第一步是将ASCII编码字符串根据ASCII码对照表转换成二进制数,然后把二进制数值按每6位进行划分,然后将6位二进制数转换为十进制数,然后在对照表中到Base64编码字符完成转码。
python和vb的代码可以通用吗        如果待编码字符串长度不是3的倍数怎么办呢?不是3的倍数会导致ASCII转换的二进制数串不能整除于6了,也就不能完整编码为Base64。为了让编译出的数串可以整除,就需要用0补位。如果有连续六位都是0的话,就用字符“=”来表示。
        例如英文单词“Man”对应的ASCII编码值为77、97、110,通过进制转换得出24位二进制数,将24位二进制数按6个一组分成四份。然后根据Base64的编码值出最终对应的值TWFU(图2)。
        知晓了原理后,我们通过VB编程来实现ASCII编码转换为Base64编码的过程,首先我
们创建两个Text文本框(Text1代表原始字符,Text2代表加密转换后的字符)。用txt来存储Base编码的字符集合(A-Z,a-z,0-9,+,- 64个字符)。
        在Text1文本中输入原始字符Python,通过for循环提取出一个英文字符,将提取的字符通过ASCII编码方法将字符转换成数字,接下来将数字除以二取余,倒序输出排列,高位补零,转换成最终二进制的数,打印在空白区域。
        由于Base64编码按每6位一组进行划分,所以根据每六位二进制数(从左往右)进行加权求和公式为(tmp=tmp*2+val(s,i,1);例如原始第一个字符为P,ASCII码值为80,转换成二进制后值为01010000,提取前六位010100,通过加权法求出二进制转十进制为20,出txt中第20位置编码的值为U即可(txt的索引初始值为0,所以第20位其实是第21位),以此类推,Python从ASCII码转换成Base64码后值为UH10Ag9u。
        小结:Base64编码是现代密码学的基础,把原本8位一组表示数据,改为6位一组表示数据,不足的部分补零,用Base64编码之后,数据长度会变长约1/3;虽然Base64可以作为简单加密算法,但是Base64能够逆运算,非常不安全(图3)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。