时间:2024-05-18
王红伟 王红纪
摘 要:目前,大多数的信息管理系统在设计实现过程中,都设计有用户身份验证的登录界面。现在用的较多的在线QQ聊天软件、手机微信聊天软件、各大银行银联取款软件等,程序设计模块的第一个模块就是身份验证模块,此模块对于信息管理系统中数据的私密性起到关键性的保护作用。
关键词:手机app MD5算法 加密
中图分类号:G712 文献标识码:A 文章编号:1672-3791(2017)01(c)-0182-02
高等职业技术学校的专业开设与课程体系的构建与现代社会发展需求密切相关。社会经济大力的发展的同时,科学技术也日新月异。智能手机也逐步走入每个家庭。基于智能手机操作系统的android程序开发也成为信息类应用技术开发专业开设的必备课程。在Android课程的教学设计、教学实现过程中,各种手机app作为教学项目走入学生课堂。像大多数以往我们所用的各种信息管理系统一样,手机APP中的信息管理系统在运行开始阶段,也加入了用户身份验证模块,信息的加密方式有很多,该文中从加密算法的原理、应用等方面分析了Andorid应用程序中MD5加密算法。
1 MD5加密算法
加密算法类型有多种,MD5算法属于散列算法,安全性高。它的过程是不可逆的过程。用户在界面输入的两个不同的密码值,通过MD5算法之后,不会得到相同的输出值。反之,根据输出值,也不能得到原始的数据。所以,要解密MD5是没有便捷的算法可用的,惟一的能用的方法是穷举法,即把可能出现的密码值用MD5算法散列之后,把得到的值与原始数据形成一对一的映射表,通过比对从映射表中找出对应的原始密码。
2 MD5的安全性
MD5加密算法的输出为128位。由于解密过程保用穷举法,在进行大量数据的比对过程中,数据验证计算量超大,因此这种方法费时费力,从而加大的密码的安全性。出于对MD5加密算法安全性的考虑,另外MD5加密算法可以免费使用,因此加密方法被广泛使用。对于职业院校中针对计算机应用专业课程开发的信息管理系统来说,MD5算法可以用在用户注册口令时的加密设计。
3 MD5加密原理
MD5加密算法的实现过程从开始到输出结果分五步骤完成。
第一步先进行补位操作:如果输入的数据位数不够的话,要先进行补位操作。MD5算法要求输入的数据位长度对512求余的结果是448。
第二步是补数据长度操作:输入数据用一个64位的数字表示其原始长度。再把这个数据用两个32位数表示,得到的数据将会是长度为512位的倍数。这是为了解决后续数据处理中对信息长度的要求。
第三步是初始化MD5参数操作:MD5在初始化时需要4个十六进制整数(X1,X2,X3,X4,)作为参数,初始化值是:X1=0X01234567,X2=0X89abcdef,X3=0Xfedcba98,X4=0X76543210。
第四步是进入MD5算法的循环运算过程:在这个处理过程中用到四个处理函数,它们分别是:
F(x1,x2,x3)=( x1& x2)|((~ x1)& x3)
G(x1,x2,x3)=( x1&z)|( x2&(~ x3))
H(x1,x2,x3)= x1^ x2^ x3
I(x1,x2,x3)= x2^( x1 (~x3))
其中,^是异或,&是与,|是或,~是反符号。
首先把MD5初始化时的4个参数值保存到(X1、X2、X3、X4)依次保存到四个变量(x1、x2、x3、x4)中。主循环有四次,每次循环操作过程中,都要对x1、x2、x3、x4中的其中3个作一次线性函数运算,然后将所得结果加上第四个变量,再将所得结果向右移一个不定的数,并加上x1、x2、x3、x4中的一个。最后计算的结果取代a、b、c或d中之一。如果x1、x2和x3的对应位是独立和均匀的,那么结果的每一位也是独立和均匀的。F是一个逐位运算的函数:如果x1,那么x2,否则x3。函数H是逐位奇偶操作符。
第五步是MD5算法中的分组数据运算过程:把MD5初始化时的四个参数X1、X2、X3、X4、分别加上x1、x2、x3、x4后的数据继续运行算法,最后的输出是由DCBA组成128位结果(其中A是低位,D为高位)。
4 MD5算法具体实现
手机APP程序设计的身份验证功能中,在登录按钮的setOnClickListener方法中进行密码验证中设计代码如下:(登录按钮的名字为loginbtn)
String user,pass;
定义变量用于获取密码框(此组件名字是password)中用户输入的密码值:pass=password.getText().toString();
用MD5算法对密码进行加密:String passmd5=MD5(pass);
加密后密码与存储密码进行比较(oldpass是存储信息中密码):if(passmd5.equals(oldpass)){//此处是密码对比成功后的代码设置}
设计MD3()方法,此方法的参数为字符串变量str, 方法返回的值为字符串newstr:
MessageDigest myDigest=MessageDigest.getInstance(“MD5”);
byte [] myResult= myDigest.digest(password.getBytes());
StringBuilder myString=new StringBuilder();
for( byte myB: myResult){
int num=b&0xff;
String s=Integer.toHexString(num);
if (s.length()==1){ myString .append(“0”+s);}
else { myString .append(+s);}
}//最后的myString就是经过MD5算法后得到的结果数据。
5 加密算法的使用建议
在目前所开发的各种信息系统中,对Md5加密方法的运用主要是在应用程序的登录界面中,对用户输入的密码文本进行加密时直接调用第四步中定义过的加密函数进行数据处理可以得到加密后的密码。但是如果将加密后的数据直接保存在数据库时,破解者还是可以通过MD5在线查询或者暴力破解可以得到密码。所以我们可以在加密的基础上,对密文进行改变,在密文中截取一段数据并丢弃,然后使用随机函数填充被丢弃的数据,且整个过程不改变MD5加密后的位数。
从软件安全角度来说,程序使用过程的加密设置是极其重要的。从程序开发与设计角度来说,解密过程也是不可避免的。任何程序的加密设计方案随着时间的发展,最终都会出现相应的解密方案来破解。程序设计中的加密算法多种多样,该文中MD5加密算法只是在某种程度上保证了程序使用过程中数据的相对安全性。
参考文献
[1] hualang.Android杂谈-用MD5加密算法加密密码[EB/OL].2011.8.http://www.iteye.com/topic/1113569.
[2] 牛耳教育.分析MD5加密算法原理[EB/OL].2010.7.http://blog.sina.com.cn/csneweredu.
[3] Md5加密算法的原理及應用[EB/OL].2011.9.http://libin52008.blog.163.com/blog/static/105327187201186981459/淡然.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!