2013年3月 第34卷第3期
计算机工程与设计
COMPUTER ENGINEERING AND DESIGN Mar.2013
VoL 34 No.3
字符型密码随机加密与解密算法的设计与实现 崔艳荣 (长江大学计算机科学学院,湖北荆州434023) 摘要:为防止网络应用系统中字符型密码被非法用户通过“跑字典”破译,并能为网络用户找回丢失的密码,同时也为 远程访问数据库做数据同步提供便利,提出一种对字符型密码采用线性随机加密与解密的算法。该算法中的加密参数随机 生成,并在密文结构中采用了随机混淆手段,对同一明文可产生不同的密文,且算法可逆。通过JavaScript语言实现了该 算法,验证了该算法的可行性和有效性。 关键词:字符型密码;随机加密参数;随机混淆;加密算法;解密算法 中图法分类号:TP309.7 文献标识号:A 文章编号:1000—7024(2013)03—0826—05
Design and implementation of random encryption and decryption algorithm for character type cipher
CUI Yan-rong (School of Computer Science,Yangtze University,Jingzhou 434023,China) Abstract:In order tO prevent the character type cipher to be deciphered by the illegal users through“run dictionary”in the net— work system,to find the lost password for the network users,and to provide convenience for use to remote access database to make data synchronization,a random linear encryption and decryption algorithm for character type cipher is put forward.The encryption parameters are randomly generated in the algorithm,and random confusion is adopted in the ciphertext structure,SO the same plaintext can produce different ciphertexts,moreover,the algorithm can be reversed.Finally,the algorithm is imple— mented by the JavaScript language,the feasibility and the validity of the algorithm is validated through experimentation. Key words:character type cipher;random encryption parameter;random confusion;encryption algorithm;decryption algorithm
0引 言 1字符型密码加密现状分析 在日益发展的网络应用中,字符型密码的用途越来越 大,例如网络用户的登录密码、股票账户密码、游戏账号 密码等。这些密码如果以明文的方式存在,则很容易被不 法分子获取,从而给网络用户带来不必要的损失。在很多 WEB应用系统中,账户密码都是以密文的形式存在,这些 密码在网络的传输过程中,就算是被不法分子截获,也不 能立即得到相应的明文,从而为网络账户的安全提供了一 定的保障。但是,多数应用系统对密码的加密采用的是不 可逆的方式,用户遗失密码后不能找回;另外,有些系统 中的密文容易被非法用户通过“跑字典”的方式破解,基 于此,提出一种字符型密码随机加密与解密算法,以期解 决以上问题。 密码加密与解密的算法也有很多,例如著名的MD5_1 J 加密算法和RSA[1_加密与解密算法等,其中分为可逆与不 可逆算法,比如MD5加密算法是不可逆的,经MD5加密 后的密文无法还原出原始密码,应用系统只能将用户输入 的原始密码按MD5加密算法运算后所得到的密文与实现经 同样算法所生成的密文进行对比方能验证用户的合法性, 此方法最大的优点是任何人都不可能篡改用户密码,具备 很高的安全性。文献[2一lO]显示,目前的WEB系统中, 对用户密码的加密,更多的是应用MD5进行加密。 采用MD5加密,可以在一定程度上保证用户密码的安 全性,但也有不足之处,主要表现在以下3个方面: (1)MD5是单向加密算法,加密后的信息不能解密,
收稿日期:2012—07—16;修订日期:2012—09—22 基金项目:湖北省自然科学基金项目(2011CDC126);湖北省教育厅科学技术研究计划优秀中青年人才基金项目(Q2O111311) 作者简介:崔艳荣(1968一),女,湖北仙桃人,博士,副教授、硕士生导师,CCF会员,研究方向为计算机网络、信息安全。 E-mail:cyanr@tom.corn 第34卷第3期 崔艳荣:字符型密码随机加密与解密算法的设计与实现 ・827・ 用户丢失密码后只能重置密码,而没有任何方法找回密码。 (2)不同的密码经MD5加密后有可能形成同一密文, 虽然概率极低,但还是可能出错,也就是说用户不用原始 密码而用另一密码也可能成功登录。 (3)也是最关键之处,经MD5加密后的密文由于无法 还原,所以在需要还原原始密码的应用中就不能使用,比 如某些网站为了方便用户下次登陆而设有保存密码的功能, 一般来说使用浏览器的cookie来保存用户ID和登录密码, 以便下次用户登录时系统自动为用户填写用户ID和登录密 码,但利用cookie来保存用户登录密码是不安全的,稍懂 点网络编程的人就可以进入用户的计算机找出相应的cookie 来窃取用户的登录密码。所以利用cookie保存用户登录密 码时需要经过一定的加密处理,并且经加密过的密文可以 由一定的算法还原出原始密码。又比如某些分布式网络应 用系统需要同步数据库的内容,而访问远程数据库就必须 有远程数据库的密码,而这个密码必须保存在本地而且需 要进行加密处理,并且加密后的密文还应该有一定的算法 来还原出原始密码。因此MD5加密算法在一定的场合下不 能满足需求。基于以上的需求,设计出一套新的加密与解 密算法有着重大的意义。 2字符型密码随机加密与解密算法设计 2.1算法设计思想 基于字符型密码随机加密与解密算法的核心功能实质 上就是字符串的加密与解密。设计要求有以下三点:①算 法相对简单,加密与解密运算速度快,消耗机器资源少。 ②在得不到原始算法的基础上进行解密难度很大,无论是 暴力破解还是技术破解都无法在短时间内完成解密,只能 根据加密算法的逆运算才能正确解密。③不担心密文泄露, 破解者即使拿到多套正确的原始密码与加密后的密文也无 法得出加密参数。 2.2加密算法与密钥设计 按以上要求进行算法设计,经本人研究发现,绝大多 数用户密码都是由计算机键盘上的可见字符组成,而计算 机键盘上的可见字符ASC码范围为33到126,本文以最长 8位密码为例进行算法设计和实现。 对于任何一个可见字符,其ASC码的范围为33到 126,其中包括所有的英文字母,数字,标点符号等。反过 来说,对于任何一个在33至126内的数字都对应着一个字 符。因此设计出一个线性加密算法,y—ax+b。其中,y为 加密后的数值,X为原始数值,对应着密码中的某一字符。 a和b是两个随机数。 线性加密参数设计:由线性加密公式y=ax+b和密文 组成原则可知,Y的取值范围为AA到ZZ,换算成十进制 值为0到675,X为原始密码的某一位经ASC转换而来, 所以X的取值范围为33到126,因此得到如下关系:其中 X,Y,a,b皆为正整数 y—ax+b y ̄676 y>0 x<127 x>32 另外为了缩小参数范围,降低计算量,可以增加设定 a>O b>O 由以上关系解得O<a<6 以下用穷举法分别求出对应于不同a值的b的取值 范围 当a一1时,解得O<b<549 当a=2时,解得O<b<423 当a一3时,解得0<b<297 当a=4时,解得0<b ̄171 当a一5时,解得O<b<45 程序设计中a由系统随机生成,范围为O<a<6,上限 是5,下限是1,b的范围用一个一维数组限制其上限, [-549,423,297,171,453分别对应不同a值时的取值范 围,下限是1。 2.3密文结构设计 密文结构设计:密文由32位26进制数组成,用大写 字母A到z表示每一位,其中A到z分别表示十进制的0 到25,原始密码字符串最大长度为8位,每一位经线性加 密后用2个大写字母表示其加密密文,因此完全表示最长 密码只需16位,根据上面分析所得的ab参数范围,设计 用1位表示随机线性加密系数a,1位表示原始密码字符串 实际长度(字符个数),2位表示b,总共用2O位表示完所 有信息,剩下12位作为随机混淆处理位,分别插入前面11 个(22位)信息之间,并在密文首尾各加一位随机值,以 增加破解难度。此外,为了防止大多数用户密码长度相同 (比如大多取8位)时所生成的长度加密位相同,长度位也 用采用加密处理,本例用参数a的十进制值加上实际长度 值所得结果再经26进制转换而成,这样得到的原始密码长 度也是个随机数,即使两个用户密码长度相同但在密文中 对应的长度位也会不同。让破解者找不到任何规律。当原 始密码长度小于8位时,用随机26进制直补齐8位,解密 时根据长度位计算结果舍弃随机补充部分。本例算法采用 如下密文结构: 密文位数 相应位数的值 0: 随机值 1--2: 加密后的线性加密参数b 3: 随机值 4: 加密后的原始字符串文长度 5: 随机值