电子邮件账户保护方法述评

时间:2022-10-09 02:52:53

电子邮件账户保护方法述评

具有相同散列地址的邮件账户信息按先后顺序依次链接在散列地址之后,称此链表为位置链表.相对于位置链表,还需要定义一个时间链表,账户信息封装成位置链表的一个节点而存入位置链表之后,还要按照时间的先后顺序链接成一个时间链表,把已经存储到文件的信息加载到散列表中需要首先加载到时间链表中,之后再通过时间链表加载到散列表.这样做可以减少组织时间并且便于对账户信息的有效性进行维护;所以,时间链表的存在是至关重要.存储邮件账户信息的数据结构设计文中采用HPT结构来实现邮件信息的存储,其中箭头代表指针,散列地址是经过散列函数计算出的地址.绝大多数的电子邮件服务器的邮件地址的格式是有相关规定的:@前的用户名可以是大小写英文字母、数字、下划线、和字符“.”的组合,其中不可以用下划线“_”和字符“.”开头.通过查找大小写英文字母、数字、下划线和字符“.”的ASCII码表,发现字符“.”的ASCII码值为最大值,大小为250,250转换成二进制为11111110;字符“0”的ASCII码值为最小值,大小为48,转化为二进制为00110000.根据以上规定可以选择合适的散列函数,并根据散列函数计算出散列地址的最大范围,这也就说明本方法使用散列表存储数据是完全可行的.电子邮件的用户名是用户根据自己意愿定义的,因此@前的2个字符势必会有许多重复.这就造成了散列表的冲突.上文提到过,文中采取在散列入口之后添加单向链表的方式来解决冲突.散列地址0之后指向的“邮件地址信息结构A”,“邮件地址信息结构B”……就是有相同散列地址的邮件账户信息链接而成的位置链表,以先来先入的方式,按先后时间次序链接在散列地址之后;因此,每一个散列地址之后都会链接一个位置链表.种结构结合的数据结构为了便于对账户信息进行管理和相应的更新维护,定义了时间链表结构体,文中定义的时间链表结构与位置链表原理相同,按先来先入的原则依次连接成一个时间链表.“时刻0”,“时刻1”……是时间链表的节点,每个节点内存储的内容与位置链表相同,即邮件账户名,密码及存储时间.时间链表与位置链表不同之处在于整个存储结构仅有一个时间链表,该链表中包含了系统中存储的所有邮件账户信息,同时也是整个结构的时间走向.时间链表中存储的信息是位置链表存储信息的总和.方法的关键在于设计一个HPT数据结构.上文已将散列表、位置链表及时间链表分别进行设计,但是最终需要实现将这三者融合为一种数据结构以便完成邮件账户信息的存储.

当邮件网关截获一封电子邮件,获取相应的用户名、密码及时间信息之后,首先要到已存在数据的HPT结构中去查找邮件账户信息是否存在.若存在,直接将邮件转发出去,这样转发出去的邮件就是合法的邮件;若不存在则使用前文介绍的SMTP协议探测方法探测目的邮件的用户名是否存在.若确定目的账户确实存在,便使用散列函数来计算出散列地址,并将账户信息存储到散列地址所指向的内存区域,同时要将相同的内容存储到时间链表的头指针指向的内存区域.当系统再次截获邮件并取得用户名密码同时确定目的账户不在散列表中,且使用SMTP协议探测出账户的存在性后,同样使用散列函数进行计算.此时,分两种情况进行添加.如果计算出的散列地址与之前的不相同,则按照上文讲述的过程存储到散列地址指向的内存区域,并将相同的账户信息以节点的形式连接到时间链表中;若经散列函数计算之后得出的散列地址与之前的地址相同,则将账户信息以节点的形式连接在前一个账户信息节点之后,同时将同样的内容以节点形式连接到时间链表中.之后所获取的账户信息都要按此方法进行相应的处理.这样,HPT结构就可以逐步建立起来.定时备份与恢复模块设计由于散列表结构复杂并且数据量大,如果每次都重新生成散列结构势必会对邮件网关系统造成很大的负担.因此采用定时备份的方法来确保数据不会因突发事件而丢失,而且当每次系统重新启动时都能从按时间顺序保存在文件中的邮件账户信息读出并且将文件中的信息添加到散列表中.由于各个位置链表中的信息总和与时间链表内的信息是相同的,且时间链表仅仅只有一个,所以选择以时间链表为依托进行备份.时间链表是按时间顺序链接而成,备份时,从时间链表的第一项依次备份,这样文件中的信息也是按时间顺序排列,时间较早的在前,时间比较晚的排列在后面.在备份过程中,将信息存储到临时文件,当所有账户信息都保存完毕后,再用临时文件中的内容覆盖备份文件中的内容,最后将临时文件删除,这样可以防止程序突然退出而导致临时文件中内容丢失.当系统需要重新启动时,首先从备份文件中将信息读取到散列表中.由于文件中的信息都是按时间顺序安排好的,所以加载到散列表时只需要按顺序在散列表中添加封装邮件信息的节点即可.这样做可以避免系统重新启动之后内存中的信息丢失和重新生成散列表而浪费大量时间.

邮件账户维护方法的性能并且体现出在实际应用中的价值.在700MHzx86处理器,256MB内存的硬件平台下,用Ubuntu10.04系统下用C语言编程模拟邮件网关系统在应用本方法时的工作过程,其中网络通信方面采用Socket技术实现,并对其中几项重要的功能模块运行情况进行分析.邮件账户信息探测模块性能测试因为进行一次探测所需时间很短,为防止在一次探测后时间变化不明显而影响实验结果,每组连续探测50次,共测试10组.最后计算出平均值即为每次探测时间.SMTP与POP3协议探测测试结果通过图5可以看出,使用SMTP协议探测测试的时间在0.70~0.82s,一次探测的时间不到1s;使用POP3协议探测测试的时间在0.50~0.64s,一次探测的时间不到1s.而由于测试所用的网络是无线网络,不稳定,造成某些组数据与其他差别较大,若在有线网中数据将会更加稳定.通过测试显示了使用SMTP与POP3协议对用户名进行探测的时间较短.生成时间链表的性能测试由于加载一个账户信息的时间比探测时间要短得多,因此同样采用加载较多量信息求得平均时间的方法.一组加载50个账户的用户名、密码及时间信息,同样测试10组最后通过计算平均数的方法求得加载每条信息的平均时间.由以上数据可以看出,加载一个邮件账户信息的速度是比较快的,加载10000封邮件账户的信息到时间链表需要7~11s,可以看出加载大量数据时间较短.性能对比为了进一步体现本方法的实际作用,还对使用与不使用本方法的电子邮件网关系统的性能做了对比,邮件网关在处理数量相同但含有不同数量的垃圾邮件时的工作时间对比。从图中可以看出2个邮件网关在处理相同数量邮件时所用时间的对比关系.在垃圾邮件增多的情况下使用文中提出的方法可以大量减少邮件网关的工作时间.同时也可以得出以下关系:假设所有的邮件大小相同,即发送邮件所用的时间是相同的,用t0表示且t0为常数;探查和存储的时间分别用t1和t2表示,t1和t2恒为正常数;并且假设合理的2500封邮件中有500封含有相同的账户信息;设账户信息不存在的邮件数为M,M为变量,所以节省时间与M的关系是线性关系,也就是说邮件账户不存在的邮件越多节省时间越多的关系.从以上的分析可以看出,文中提出的方法对邮件网关系统性能的提升起到了一定的作用.如果将本方法应用到实际的邮件系统中,在处理大量邮件信息时会有效减少垃圾邮件网关工作的影响,对提高邮件网关的工作效率起了十分重要的作用.

作者:张乐君 邓鑫 张乐群 张健沛 杨静 国林 郭治易 单位:哈尔滨工程大学 哈尔滨热电厂有限责任公司

上一篇:三维外语写作教育的构建探索 下一篇:地方产业销售电量发展趋向综述