admin 管理员组文章数量: 887021
2024年1月26日发(作者:img文件怎么刷入手机)
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编码字符完成转码。
如果待编码字符串长度不是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)。
版权声明:本文标题:VB使用Base64编码 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1706212925h504307.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论