VB使用Base64编码

2021-12-21 23:13陈新龙
电脑报 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编码字符完成转码。

如果待编码字符串长度不是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)。

猜你喜欢
二进制字符编码
住院病案首页ICD编码质量在DRG付费中的应用
Python实现图片转字符画
有用的二进制
用Scratch把十进制转为二进制
正则表达式快速入门
有趣的进度
图片轻松变身ASCⅡ艺术画
高效视频编码帧内快速深度决策算法
视频监视系统中字符叠加技术的应用
不断修缮 建立完善的企业编码管理体系