刘华
摘要:为了实现企业信息化平台数据加密,采用Base64算法的编码原理,对其加密解密原理进行了详细的阐述和说明。通过图文结合的叙述方式,使读者能通过实例应用,快速掌握Base64算法的加解密工作方式和存储原理。同时结合实际软件开发过程中,运用Base64算法原理编制的Delphi程序,实现了企业信息存储过程中数据的加密解密功能。
关键词:Base64;加密;解密;Delphi
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)02-0078-02
Research on Base64 Encoding Algorithm and Delphi Implementation
LIU Hua
(Jiangsu Sunshine Group Information Center, Jiangyin 214426, China)
Abstract: In order to realize the data encryption of enterprise information platform, the principle of Encryption and Decryption of Base64 algorithm is expatiated and explained in detail. Through the combination of graphic narrative, so that readers can through examples of applications, quick grasp of Base64 algorithm encryption and decryption work and storage principle. At the same time combined with the actual software development process, the use of the principle of Base64 algorithm Delphi program to achieve the enterprise information stored in the process of data encryption and decryption functions.
Key words: Base64; encryption; decryption; Delphi
1 概述
随着企业信息化程度的不断提高,对数据的安全性、保密性有了更高的要求。如何保障数据信息安全已成为每个计算机应用企业亟待解决的问题,而确保数据安全的关键是进行数据加密。计算机数据加密技术是指对输入的明文信息进行数据加密,通过密匙重新编码,隐含真实内容,使非法用户无法获知有效数据信息的一种技术处理方法。通过对系统数据加密,可以提高数据传输的安全性和完整性,达到安全保密的效果。Base64是最常见的一种用于数据传输的加密编码方式,是程序开发中经常使用的编码方法。
2 Base64算法编码原理浅析
2.1 Base64算法数据编码对应表
Base64算法是一种二进制数据的表示方法, 通常用作存储、传输二进制数据的编码方法[1]。主要应用于网络邮件传输、HTTP环境下较长标识信息传输、口令加密等。以每六位为一个单元,对应Base64编码表中某个可打印字符。Base64编码中的可打印字符包括26个大写字母A-Z、26个小写字母a-z、10个数字0-9,这样共有62个字符,另外2个传统的Base64编码表字符是为+和/。这64个字符,所对应的Base64编码表如图1所示。
2.2 Base64编码工作方式解析
Base64编码工作方式是将三个8位字节转化为四个6位字节的数据编码过程,之后在6位的前面补两个0,形成8位一个字节的形式。众所周知三个字节有24位,刚好对应于四个以6为单位的Base64单元,三个传统字节可以由四个Base64字符值来表示,保证有效位数是相同的, 所以base64编码后的字符串一定能被4整除[2]。Base64在数据编码转换过程中,将3字节的输入数据,先后放入一个24位的缓冲区中,先来的字节占高位。数据不足3字节的话,缓冲区中剩下的位用0补足。然后,每次取出6个位,计算二进制所对应的索引值,对照Base64编码表中ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为加密后的编码输出。反复执行上述操作,直到全部输入数据转换完成,所以实际加密后的数据量是加密前数据量的三分之四。
在实际数据加密转化过程中,每次转换的字节数会出现有不足六位的情况,处理方法是对转换后不足字节数加零凑足六位,这样处理后在解码过程中就会出现多余的位。base64编码的解决方案是在凑零的同时,满足凑出位数是8的倍数,不足就加一个或者两个特殊的六位”=”符号。因为多个8位转为6位只会出现剩余2位和4位的情况,剩余2位只需要一个表示六位的”=” 便可变为8的整数;而剩余4位则需要添加两个表示6位的”=”符合变成8的整数。然后在解密的时候不解析”=”符合即可[3]。之所以总数位必须凑成8的倍数,是因为Base64是最常见的传输8位字节代码的编码方式,用于加密后的数据传送。在传送机制中最小单位是按照字节计算,所以不能出现位总数不是8的倍数的情况。在接收到数据后,按顺序将base64编码值解密成字节就实现了数据解码过程。
3 实例解析Base64加解碼方式
通过上述对Base64编码工作方式的解析,大家对Base64加解码工作原理也有了相当的认识。接下来通过对字符串”Sun”的实例解析阐述Base64加解码转化过程[4]。例如:字符串”Sun”中的字符”S”、”u”、”n”查找ASCII码表可以得出对应的数据值为:83,117,110,将三个数值转换为二进制编码后为:01010011、01110101、01101110,将这三个二进制字符串重组连接成—个24位的二进制,再进行编码拆分,每次取六位二进制数,得到010100、110111、010101、101110四个六位的二进制数,这四个二进制数对应的整数值分别为:20,55,21,46,查Base64编码表,对应U、3,V,u这4个字符,如表1所示。因此”Sun”的Base64编码为”U3Vu”。
以”Sun”为实例的这个字符串,恰好是3的倍数,转换成二进制以后一共是24位二进制数,位數能被6整除,恰好能分成四个六位二进制数。而更多字符串并非是3的倍数,转化为二进制编码串时不一定是6的整数倍数,Base64编码中解决办法是这样的:原字符串转化为二进制值不够位数可以用0来补足,转换时Base64编码用=号来代替。这就是为何一组字符串经过Base64编码后,重新加密的数据会出现一个或两个等号的原因.因为:原字符串字节数取余3以后,只可能是0,1,2。如果取余为0,则表示转化前字符串字节数正好是3的倍数,如表1字符串”Sun”的Base64编码方式。如果取余为1,为了实现Base64编码是4的倍数,就要补两个=;同理,如果是取余为2就要补1个=。如图2所示是转换后非标准字符串,余数为1和2的Base64编码结果。字符串”S”的Base64编码为”Uw==”,字符串”Su”的Base64编码为”U3U=”。
4 Dephi实现Base64加密解密
4.1 Base64编码的Delphi程序实现
在Delphi编程实现Base64编码时,主要是将字符串值得到的二进制数据流转化Base64编码流[5]。编程实现方式步骤大致分为:分配要转化的二进制数据流所需位空间,并将该二进制数据流装入到位空间内,取出其中的六位,将其转化为整型数值,在对应的标准编码中找出整型数值对应的字符,作为输出Base64编码流,重复循环,直到所有二进制数据流执行完毕,返回编码的Base64数据流。Delphi编程实现编码转换主要代码如下:
4.2 Base64解码方式的Delphi程序实现
解码方式主要是将得到的Base64编码流转化为二进制数据流。编程实现解码步骤大概有:取出Base64编码流的一个字符,将字符比对编码表值,转化成六位二进制数据流,重复循环,直到所有Base64编码流执行完毕,得到解码对应的二进制数据流。Delphi编程实现解码主要代码如下。
5 结束语
在企业软件开发数据安全处理的简单应用中,使用Base64编码特性对数据作了一个简单的加解密应用。其特点是运算相对简单,耗用运算少,执行效率高。从严格定义上分析,Base64称不上完全意义上的数据加密方式,因其转化过程不产生密钥,只能说是编码的转换和重新组合,所以真正破解也相对容易。大家注意到Base64的编码标准是A-Z、a-z、0-9、+和/,只要在程序编制中动态随机改变编码排列顺序,那么编码过程中同样会产生不同的随机代码,类似密钥,被破解的概率将会大大降低,从而提高数据的安全性。
参考文献:
[1] 陈媛. E-Mail传输的自动解码系统[J]. 电脑开发与应用, 2000(2).
[2] 姚峰. Java平台中Base64编码/解码算法的改进[J]. 计算机应用与软件, 2008, 25(12).
[3] 李道强. 浅谈Base64编码及简单加密中的应用[J]. 福建电脑, 2006(2).
[4] 向东. 应用密码学[M]. 北京:电子工业出版社, 2006.
[5] 韩宇贞, 朱华生. 基于Base64编码的数据加密技术[J]. 南昌工程学院学, 2002, 21(4).