用户远程访问HDFS集群的装置及方法转让专利

申请号 : CN201310554689.8

文献号 : CN103561033B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 沈沛意董洛兵宋娟张亮孙庚泽薛丹刘畅

申请人 : 西安电子科技大学宁波信息技术研究院

摘要 :

本发明涉及一种用户远程访问HDFS集群的装置及方法,该装置包括连接用户与HDFS集群的中间件,该中间件包括相互之间有调度关系的服务端模块和客户端模块,服务端模块包括服务启动模块、访问请求处理模块、访问请求传输模块及文件管理模块,客户端模块包括用户操作模块、IP封装模块及服务器选择模块。在HDFS集群上具有公网IP的服务器上开启数据调度或/和数据存储的服务,对需要远程访问HDFS集群的用户提供一个中间件,用户使用中间件对HDFS集群进行远程访问。本发明不仅可以解决用户远程访问HDFS集群,同时实现了对用户的有效隔离。

权利要求 :

1.一种用户远程访问HDFS集群的装置,其特征在于,包括连接用户与HDFS集群的中间件,所述中间件包括相互之间有调度关系的服务端模块和客户端模块,其中,服务端模块包括:服务启动模块,用于启动HDFS集群中服务器上数据调度和数据存储的服务;

访问请求处理模块,用于处理用户发来的访问请求;

访问请求传输模块,用于传输用户发来的访问请求;

文件管理模块,用于管理用户在HDFS集群中数据存储服务器上的文件信息;

用户目录建立模块,用于在HDFS集群的数据存储服务器中给用户建立远程访问目录;

客户端模块包括:

用户操作模块,用于接收用户的访问请求;

IP封装模块,用于封装HDFS集群上具有公网IP的服务器的IP地址;

服务器选择模块,用于选择离用户网络拓扑最近的服务器,并将选择出来的离用户网络拓扑最近的服务器的IP地址记录下来;

加密模块,用于对用户名进行加密,以生成验证码;

验证模块,用于对加密用户的验证码进行验证;

客户端模块根据IP封装模块封装的IP地址选择服务器作为转接服务器,转接服务器在用户与数据存储服务器之间建立连接。

2.一种用户远程访问HDFS集群的方法,其特征在于,包括以下步骤:(1)、在HDFS集群上具有公网IP的服务器上开启数据调度或/和数据存储的服务;

(2)、对向需要远程访问HDFS集群的用户提供一个中间件,所述中间件包括相互之间有调度关系的服务端模块和客户端模块,其中,服务端模块包括:

服务启动模块,用于启动服务器上数据调度和数据存储的服务;

访问请求处理模块,用于处理用户发来的访问请求;

访问请求传输模块,用于传输用户发来的访问请求;

文件管理模块,用于管理用户在HDFS集群中数据存储服务器上的文件信息;

客户端模块包括:

用户操作模块,用于接收用户的访问请求;

IP封装模块,用于封装HDFS集群上具有公网IP的服务器的IP地址;

服务器选择模块,用于选择离用户网络拓扑最近的服务器,并将选择出来的离用户网络拓扑最近的服务器的IP地址记录下来;

(3)、用户使用上述中间件对HDFS集群进行远程访问:(3-1)、用户使用上述中间件中客户端模块提供的用户操作模块提出访问请求,访问请求的内容选择下列操作中的一个或多个:创建文件、打开读取文件、删除文件、列出文件及创建文件夹;

(3-2)、客户端模块根据IP封装模块中封装的IP地址,通过服务器选择模块依次对各个服务器进行连接测试,选择网络延迟最小的服务器,然后用户的访问请求通过服务端模块中的访问请求处理模块和访问请求传输模块发送给该服务器,将该服务器称为转接服务器;

(3-3)、转接服务器接收到用户发送的访问请求后,寻找距离该转接服务器最近的数据存储服务器,通过服务启动模块启动该数据存储服务器上数据调度或/和数据存储的服务,然后在用户与该数据存储服务器之间建立TCP连接,从而实现用户对该数据存储服务器的远程访问操作。

3.根据权利要求2所述的用户远程访问HDFS集群的方法,其特征在于,所述中间件的客户端模块还包括:加密模块,用于对用户名进行加密,以生成验证码;

验证模块,用于对加密用户的验证码进行验证;

所述服务端模块还包括:用户目录建立模块,用于在HDFS集群的数据存储服务器中给用户建立远程访问目录;

当用户与距离转接服务器最近的数据存储服务器连接后,所述中间件的用户目录建立模块根据每个用户的用户名为它们建立一个目录,用户对HDFS集群中数据存储服务器的一切访问操作都只能在该目录下进行,而不能对其他用户目录下的内容进行访问。

4.根据权利要求3所述的用户远程访问HDFS集群的方法,其特征在于,所述加密模块中对用户名进行加密方法为:将用户名按照下述规则进行编码,从而生成一个长30个字符的验证码:验证码的前六个字符为验证码的基础信息,依次包括:密钥、用户名长度、每隔多少个字符插入无效字符、每次插入的无效字符数量、字符o及字符k,每隔多少个字符插入无效字符称为span,每次插入的无效字符数量称为space,其中字符o及字符k用来对验证码是否有效进行验证,密钥为0到25之间的一个数字中随机生成的一个数字,加密过程中,将用户名的每个字符用密钥进行加密,同时每加密span个字符便插入space个随机字符,最后如果验证码长度小于30个字符,则在末尾插入随机字符进行补全;

所述验证模块通过如下方式对验证码进行解密:

首先读取出验证码的前六个字符,次序依次为密钥、用户名长度、每隔多少个字符插入无效字符、每次插入的无效字符数量、字符o及字符k;

如果这个验证码第五位和第六位不是字符o和字符k,则说明这个验证码无效,返回空值;

然后用密钥对剩下的字符进行解码,每解码span个字符则跳过space个字符,直到解码出明文长度为用户名长度个字符串时结束,最后解码得到完整的用户名。

5.根据权利要求2所述的用户远程访问HDFS集群的方法,其特征在于,所述步骤(3-2)中,查找网络延迟最小的服务器的方法为:根据IP封装模块内封装的IP地址,依次对每个服务器的IP使用ping命令,记录从每个服务器收到返回包所需要的时间,最后从所记录的时间中找出所需时间最短的服务器,该服务器即为离用户网络拓扑最近的服务器,并将该服务器的IP记录下来。

6.根据权利要求2所述的用户远程访问HDFS集群的方法,其特征在于,所述步骤(3-3)采用HDFS集群自带的机架感知机制寻找距离转接服务器最近的数据存储服务器。

7.根据权利要求2所述的用户远程访问HDFS集群的方法,其特征在于,所述中间件以Jar包的形式提供给用户。

说明书 :

用户远程访问HDFS集群的装置及方法

技术领域

[0001] 本发明涉及数据存储访问领域,尤其涉及一种用户远程访问HDFS集群的装置及方法。

背景技术

[0002] Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach用java语言实现的一个开源软件框架,可以实现在大量计算机组成的集群中对海量数据进行分布式计算。Hadoop由Apache基金会开发,用户可以在不了解分布式底层细节的情况下开发分布式程序,并充分利用集群的功能进行高速运算和存储。Hadoop框架中最核心的设计就是HDFS(Hadoop Distributed File System,简称HDFS)和MapReduce,HDFS负责提供海量数据的存储,MapReduce负责提供对数据的计算。
[0003] HDFS是Hadoop的分布式文件系统,HDFS是一个主从结构,一个HDFS集群一般包括一个名称节点(也称NameNode节点或名称服务器)和多个存储节点(也称DataNode节点或数据存储服务器)。另外,包含上述HDFS集群的Hadoop集群还包括命名为Secondary NameNode的节点、命名为JobTracker的节点和命名为TaskTracker的节点组,其中NameNode节点记录了文件是如何被拆分成分块(block)以及这些分块(block)都存储到了哪些DateNode节点中,NameNode节点还同时保存了文件系统运行的状态信息;DataNode节点中存储的是被拆分的分块(blocks),Secondary NameNode节点负责收集文件系统运行的状态信息给NameNode节点;当有任务提交到Hadoop集群时,JobTracker节点负责任务的运行,并负责调度多个TaskTracker节点;TaskTracker节点负责某一个map或者reduce任务。
[0004] 在Hadoop中,HDFS具有高容错性的特点,可以通过设计部署在低廉的硬件上。HDFS能够提供高传输速率对应用程序的数据进行访问,适合具有超大数据集的应用程序。HDFS不仅具有备份功能,可以将存储在HDFS集群中的数据自动地进行备份,同时HDFS还具有机架感知机制,在用户写入数据时,HDFS会选择距离用户最近的节点进行写入;在用户读取数据时,HDFS会选择距离用户最近的备份块进行读取,从而最大限度地减少带宽占用率。
[0005] 虽然HDFS具有高容错、高并发及节省带宽等特点,但是为了最大限度地节省带宽及释放NameNode节点的压力,用户从HDFS集群中读写数据时,采用的是点对点的方式,即NameNode节点会将用户与存储数据的DataNode节点直接对接,让用户直接从DataNode节点中获取数据流。这样做虽然达到了开发者想要的目的,但是对使用HDFS进行数据存储访问来说却起到了相反的作用。由于在Hadoop集群中,并不是每台存储数据的服务器(DataNode节点)都有公网IP,当NameNode节点将DataNode节点的IP返回给用户时,用户得到的是DataNode节点在服务器集群中的内网IP,用户不能使用这个内网IP对DataNode节点进行访问,所以也就不能从DataNode节点中读写数据。因此,如果在应用集群服务器上直接搭建HDFS,会出现应用集群服务器外的用户不能读写HDFS集群中数据的情况。
[0006] 因此在现有技术条件下,在保持HDFS自身优势不受影响的情况下,迫切需要一种能够实现用户远程访问HDFS集群中数据的技术方案。

发明内容

[0007] 本发明首要解决的技术问题是针对现有技术提供一种用户远程访问HDFS集群的装置,利用该装置能够实现用户对远程存储进行访问。
[0008] 本发明进一步要解决的技术问题是针对现有技术提供一种用户远程访问HDFS集群的方法,该方法在实现用户对远程存储进行访问的同时,还实现了对访问HDFS集群的用户进行有效隔离,即用户不能直接接触到HDFS集群中服务器的IP地址。
[0009] 本发明解决上述首要技术问题所采用的技术方案为:一种用户远程访问HDFS集群的装置,其特征在于,包括连接用户与HDFS集群的中间件,所述中间件包括相互之间有调度关系的服务端模块和客户端模块,其中,
[0010] 服务端模块包括:
[0011] 服务启动模块,用于启动HDFS集群中服务器上数据调度和数据存储的服务;
[0012] 访问请求处理模块,用于处理用户发来的访问请求;
[0013] 访问请求传输模块,用于传输用户发来的访问请求;
[0014] 文件管理模块,用于管理用户在HDFS集群中数据存储服务器上的文件信息;
[0015] 客户端模块包括:
[0016] 用户操作模块,用于接收用户的访问请求;
[0017] IP封装模块,用于封装HDFS集群上具有公网IP的服务器的IP地址;
[0018] 服务器选择模块,用于选择离用户网络拓扑最近的服务器,并将选择出来的离用户网络拓扑最近的服务器的IP地址记录下来。
[0019] 用户使用上述装置访问HDFS集群的使用过程为:
[0020] HDFS集群上具有公网IP的服务器开启有数据调度或/和数据存储的服务,[0021] 用户使用上述装置对HDFS集群进行远程访问的过程为:
[0022] (a)、用户使用上述中间件中客户端模块提供的用户操作模块提出访问请求,访问请求的内容选择下列操作中的一个或多个:创建文件、打开读取文件、删除文件、列出文件及创建文件夹;
[0023] (b)、客户端模块根据IP封装模块中封装的IP地址,通过服务器选择模块依次对各个服务器进行连接测试,选择网络延迟最小的服务器,然后将用户的访问请求通过服务端模块中的访问请求处理模块和访问请求传输模块发送给该服务器,将该服务器称为转接服务器;
[0024] (c)、转接服务器接收到用户发送的访问请求后,寻找距离该转接服务器最近的数据存储服务器,通过服务启动模块启动该数据存储服务器上数据调度或/和数据存储的服务,然后在用户与该数据存储服务器之间建立TCP连接,从而实现用户对该数据存储服务器的远程访问操作。
[0025] 作为改进,所述中间件的客户端模块还包括:
[0026] 加密模块,用于对用户名进行加密,以生成验证码;
[0027] 验证模块,用于对加密用户的验证码进行验证;
[0028] 所述服务端模块还包括:用户目录建立模块,用于在HDFS集群的数据存储服务器中给用户建立远程访问目录。
[0029] 这样,当用户与距离转接服务器最近的数据存储服务器连接后,所述中间件的用户目录建立模块根据每个用户的用户名为它们建立一个目录,用户对HDFS集群中数据存储服务器的一切访问操作都只能在该目录下进行,而不能对其他用户目录下的内容进行访问。
[0030] 本发明解决上述进一步技术问题所采用的技术方案为:一种用户远程访问HDFS集群的方法,其特征在于,包括以下步骤:
[0031] (1)、在HDFS集群上具有公网IP的服务器上开启数据调度或/和数据存储的服务;
[0032] (2)、对需要远程访问HDFS集群的用户提供一个中间件,所述中间件包括相互之间有调度关系的服务端模块和客户端模块,其中,
[0033] 服务端模块包括:
[0034] 服务启动模块,用于启动服务器上数据调度和数据存储的服务;
[0035] 访问请求处理模块,用于处理用户发来的访问请求;
[0036] 访问请求传输模块,用于传输用户发来的访问请求;
[0037] 文件管理模块,用于管理用户在HDFS集群中数据存储服务器上的文件信息;
[0038] 客户端模块包括:
[0039] 用户操作模块,用于接收用户的访问请求;
[0040] IP封装模块,用于封装HDFS集群上具有公网IP的服务器的IP地址;
[0041] 服务器选择模块,用于选择离用户网络拓扑最近的服务器,并将选择出来的离用户网络拓扑最近的服务器的IP地址记录下来;
[0042] (3)、用户使用上述中间件对HDFS集群进行远程访问:
[0043] (3-1)、用户使用上述中间件中客户端模块提供的用户操作模块提出访问请求,访问请求的内容选择下列操作中的一个或多个:创建文件、打开读取文件、删除文件、列出文件及创建文件夹;
[0044] (3-2)、客户端模块根据IP封装模块中封装的IP地址,通过服务器选择模块依次对各个服务器进行连接测试,选择网络延迟最小的服务器,然后将用户的访问请求通过服务端模块中的访问请求处理模块和访问请求传输模块发送给该服务器,将该服务器称为转接服务器;
[0045] (3-3)、转接服务器接收到用户发送的访问请求后,寻找距离该转接服务器最近的数据存储服务器,通过服务启动模块启动该数据存储服务器上数据调度或/和数据存储的服务,然后在用户与该数据存储服务器之间建立TCP连接,从而实现用户对该数据存储服务器的远程访问操作。
[0046] 该方案中,HDFS集群中服务器的真实IP地址被封装在中间件中,用户无法接触到这些IP地址,并且用户也不需要知道每个HDFS集群中服务器的真实IP地址,只需要使用本发明提供的中间件便可访问HDFS集群。
[0047] 作为改进,所述中间件的客户端模块还包括:
[0048] 加密模块,用于对用户名进行加密,以生成验证码;
[0049] 验证模块,用于对加密用户的验证码进行验证;
[0050] 所述服务端模块还包括:用户目录建立模块,用于在HDFS集群的数据存储服务器中给用户建立远程访问目录。
[0051] 当用户与距离转接服务器最近的数据存储服务器连接后,所述中间件的用户目录建立模块根据每个用户的用户名为它们建立一个目录,用户对HDFS集群中数据存储服务器的一切访问操作都只能在该目录下进行,而不能去访问其他用户目录下的内容。该改进方案可以起到对用户进行隔离的作用——即用户在访问HDFS集群时,拥有一块私有的存储空间,其他用户无法对该私有存储空间进行访问,从而既降低了用户的使用难度,又保证了HDFS集群自身的安全。
[0052] 作为进一步地改进,所述加密模块中对用户名进行加密的方法为:
[0053] 将用户名按照下述规则进行编码,从而生成一个长30个字符的验证码:
[0054] 验证码的前六个字符为验证码的基础信息,依次包括:密钥、用户名长度、每隔多少个字符插入无效字符、每次插入的无效字符数量、字符o及字符k;其中,每隔多少个字符插入无效字符称为span,每次插入的无效字符数量称为space,字符o及字符k用来对验证码是否有效进行验证;密钥为0到25之间随机生成的一个数字,加密过程中,将用户名的每个字符用密钥进行加密,同时每加密span个字符便插入space个随机字符,最后如果验证码长度小于30个字符,则在末尾插入随机字符进行补全;
[0055] 所述验证模块通过如下方式对验证码进行解密:
[0056] 首先读取出验证码的前六个字符,次序依次为密钥、用户名长度、每隔多少个字符插入无效字符、每次插入的无效字符数量、字符o及字符k;
[0057] 如果这个验证码的第五位和第六位不是字符o和字符k,则说明这个验证码无效,返回空值;
[0058] 然后用密钥对剩下的字符进行解码,每解码span个字符则跳过space个字符,直到解码出来的明文长度与用户名的长度相同时结束,最后解码得到完整的用户名。
[0059] 再改进,所述步骤(3-2)中,查找网络延迟最小的服务器的方法为:根据IP封装模块内封装的IP地址,依次对每个服务器的IP使用ping命令,记录从每个服务器收到返回包所需要的时间,最后从所记录的时间中找出所需时间最短的服务器,该服务器即为离用户网络拓扑最近的服务器,并将该服务器的IP记录下来。
[0060] 再改进,所述步骤(3-3)中采用HDFS集群自带的机架感知机制寻找距离转接服务器最近的数据存储服务器。
[0061] 作为优选,所述中间件以Jar包的形式提供给用户。
[0062] 与现有技术相比,本发明的优点在于:本发明不仅可以解决用户远程访问HDFS集群问题,同时还实现了对用户进行有效隔离,即用户不需要知道HDFS集群中每个服务器的真实IP地址,只需要使用本发明提供的中间件即可访问HDFS集群,从而使得用户使用起来非常简单。

附图说明

[0063] 图1为本发明实施例一中用户远程访问HDFS集群的整体架构图;
[0064] 图2为本发明实施例一中中间件的模块框图;
[0065] 图3为本发明实施例一中用户远程访问HDFS集群的方法流程图;
[0066] 图4为本发明实施例一中HDFS集群机架感知机制中节点间距离计算方法的流程图;
[0067] 图5为本发明实施例二中中间件的模块框图。

具体实施方式

[0068] 下面结合附图实施例对本发明作进一步详细说明。
[0069] 实施例一
[0070] 本实施例首先提供了一种用户远程访问HDFS集群的装置,参见图1所示,该装置包括连接用户与HDFS集群的中间件,所述中间件包括相互之间有调度关系的服务端模块和客户端模块,其中,
[0071] 服务端模块包括:
[0072] 服务启动模块,用于启动HDFS集群中服务器上数据调度和数据存储的服务;
[0073] 访问请求处理模块,用于处理用户发来的访问请求,这里的处理指的是判读用户发来的访问请求是哪一种访问请求,然后对判断后的访问请求进行分类处理;
[0074] 访问请求传输模块,用于传输用户发来的访问请求;
[0075] 文件管理模块,用于管理用户在HDFS集群中数据存储服务器上的文件信息,如记录及保存用户在HDFS集群中数据存储服务器上的目录地址及目录内的文件信息;
[0076] 客户端模块包括:
[0077] 用户操作模块,用于接收用户的访问请求;
[0078] IP封装模块,用于封装HDFS集群上具有公网IP的服务器的IP地址;
[0079] 服务器选择模块,用于选择离用户网络拓扑最近的服务器,并将选择出来的离用户网络拓扑最近的服务器的IP地址记录下来,参见图2所示。
[0080] 本实施例提供一种用户远程访问HDFS集群的方法,用户通过上述中间件访问HDFS集群,具体包括以下步骤,参见图3所示:
[0081] (1)、在HDFS集群上具有公网IP的服务器上开启数据调度或/和数据存储的服务;
[0082] (2)、对需要远程访问HDFS集群的用户提供一个具有上述结构的中间件;
[0083] (3)、用户使用上述中间件对HDFS集群进行远程访问:
[0084] (3-1)、用户使用上述中间件中客户端模块提供的用户操作模块提出访问请求,访问请求的内容选择下列操作中的一个或多个:创建文件、打开读取文件、删除文件、列出文件及创建文件夹;
[0085] (3-2)、客户端模块根据IP封装模块中封装的IP地址,通过服务器选择模块依次对各个服务器进行连接测试,选择网络延迟最小的服务器,然后将用户的访问请求通过服务端模块中的访问请求处理模块和访问请求传输模块发送给该服务器,将该服务器称为转接服务器;
[0086] (3-3)、转接服务器接收到用户发送的访问请求后,寻找距离该转接服务器最近的数据存储服务器,通过服务启动模块启动该数据存储服务器上数据调度或/和数据存储的服务,然后在用户与该数据存储服务器之间建立TCP连接,从而实现用户对该数据存储服务器的远程访问操作。
[0087] 所述步骤(3-2)中,查找网络延迟最小的服务器的方法为:根据IP封装模块内封装的IP地址,依次对每个服务器的IP使用ping命令,记录从每个服务器收到返回包所需要的时间,最后从所记录的时间中找出所需时间最短的服务器,该服务器即为离用户网络拓扑最近的服务器,并将该服务器的IP记录下来。
[0088] 所述步骤(3-3)中采用HDFS集群自带的机架感知机制寻找距离转接服务器最近的数据存储服务器。图4描述了HDFS集群机架感知机制中节点间距离计算方法的流程图,它采用树来表示节点的网络结构,节点间的距离用它们到最近的公共父节点的节点数之和来进行计算。例如,距离节点H1和节点H2最近的公共父节点为R1,节点H1到父节点R1的节点数为1,节点H2到父节点R1的节点数也为1,则节点H1和节点H2的距离为2;又如,节点H1与节点H6的最近的公共父节点为D1,H1到D1的节点数为2,H6到D1的节点数也为2,则节点H1与节点H6的距离为4。HDFS集群自带的机架感知机制为常规技术,不再继续详述。
[0089] 本实施例中,所述中间件以Jar包的形式提供给用户。
[0090] 实施例二
[0091] 与实施例一不同,所述中间件的客户端模块还包括:
[0092] 加密模块,用于对用户名进行加密,以生成验证码;
[0093] 验证模块,用于对加密用户的验证码进行验证;
[0094] 所述服务端模块还包括:用户目录建立模块,用于在HDFS集群的数据存储服务器中给用户建立远程访问目录;参见图5所示。
[0095] 当用户与距离转接服务器最近的数据存储服务器连接后,所述中间件的用户目录建立模块根据每个用户的用户名为它们建立一个目录,用户对HDFS集群中数据存储服务器的一切访问操作都只能在该目录下进行,而不能对其他用户目录下的内容进行访问。
[0096] 所述加密模块中对用户名进行加密的方法为:
[0097] 将用户名按照下述规则进行编码,从而生成一个长为30个字符的验证码:
[0098] 验证码的前六个字符为验证码的基础信息,依次包括:密钥、用户名长度、每隔多少个字符插入无效字符、每次插入的无效字符数量、字符o及字符k;其中,每隔多少个字符插入无效字符称为span,每次插入的无效字符数量称为space,字符o及字符k用来对验证码是否有效进行验证;密钥为0到25之间随机生成的一个数字,加密过程中,将用户名的每个字符用密钥进行加密,同时每加密span个字符便插入space个随机字符,最后如果验证码长度小于30个字符,则在末尾插入随机字符进行补全;
[0099] 所述验证模块通过如下方式对验证码进行解密:
[0100] 首先读取出验证码的前六个字符,次序依次为密钥、用户名长度、每隔多少个字符插入无效字符、每次插入的无效字符数量、字符o及字符k;
[0101] 如果这个验证码的第五位和第六位不是字符o和字符k,则说明这个验证码无效,返回空值;
[0102] 然后用密钥对剩下的字符进行解码,每解码span个字符则跳过space个字符,直到解码出来的明文长度与用户名长度相同时结束,最后解码得到完整的用户名。
[0103] 下面以用户名是slx123为例对上述加密和解密的过程进行详细描述:
[0104] 密钥key是随机生成的,本例子中生成的密钥key是“5”,根据字母表把它映射成“F”,Span(空多少位插入无效数据)也是自动生成的,这里是“7”,所以映射成“H”,Space(每次插入无效数据的位数),这里是“0”,映射成“A”,Length(加密数据的长度),这里加密数据是“SLX123”,所以长度为6,映射成“G”。验证码前两位字符用于确认是否是正确的验证码字符“o”和字符“k”,利用密钥key来进行加密,公式为:(x-'A'+key)%26+'A',其中x是“o”或者“k”,这里的key是5,所以加密结果分别为“T”、“P”,以上便是验证码前6位的含义。
[0105] 接下来,对用户名进行加密,首先按照加密公式('S'-'A'+key)%26+'A'加密第一个数据“S”为X;然后判断是否需要插入无效字符,此处span为7,意思是指每加密7位数据便插入space个无效数据,现在只加密了一位,因此不需要插入,然后直接加密下一位“L”;重复以上步骤,将数据完全加密完成后,如果密文长度不足30位,则通过自动生成的无效字符填充不足的空间。因此加密后的验证码是FHAGTPXQCghiPHARPFRARGJYYEFYBR。
[0106] 解密过程为加密的逆过程,先获取前6位的信息,Key="F","A"=5,Span="H","A"=7,Space=...=0,Length=...=6,O=('T'-'A'+26-key)%26+'A'='o',k=('T'-'A'+26-key)%26+'A'='k';先判断第五位和第六位的字符是否为“o”和“k”,如果是,则说明密文有效,然后才开始解密。先解密第一位('X'-'A'+26-key)%26+'A'='S',然后通过span判断下一位是否为无效字符,因为span为7,可知不是无效字符,所以继续解密得到“L”,重复以上步骤;当解码出来的明文长度为length时停止解密过程。此时的明文就是被加密的数据,解码后得到的用户名SLX123。