当前位置: 代码迷 >> J2EE >> 什么是对密码作MID5加密,简单介绍一下,该怎么处理
  详细解决方案

什么是对密码作MID5加密,简单介绍一下,该怎么处理

热度:57   发布时间:2016-04-22 01:45:48.0
什么是对密码作MID5加密,简单介绍一下
简单的了解下什么是MID5加密

------解决方案--------------------
首先MD5不是加密(加密/解密必须是可逆的),而是做不可逆的信息摘要。

md5('123456') ==> e10adc3949ba59abbe56e057f20f883e
md5('12345') ==> 827ccb0eea8a706c4c34a16891f84e7b
md5('abcd') ==> e2fc714c4727ee9395f324cd2e7f331f
md5('abc') ==> 900150983cd24fb0d6963f7d28e17f72

可以发现,原文即使很接近,其MD5结果也相差很大,因此,很难比较轻易的将md5反向成原文。

比如登录密码,登录的时候,是将输入的密码再做一次MD5,和之前保存在数据库里面的MD5比较一下,相同,则说明密码相同,不同,则密码错误。当然,MD5可能会有冲突,比如e10adc3949ba59abbe56e057f20f883e可能对应123456,但也可能对应123456.................xxxx,但是在可能的密码长度内,不可能出现冲突。

好处是即使数据库管理员,也很难直接获取用户的密码明文

当然,md5不是不能破解,但网上的都是属于暴利型。先将所有可能的密码都算一遍md5,放到数据库里面,然后再拿用户的md5到数据库里面去查找,找到对应的原文。但那个代价太大了,由26个字母组成的6位密码,就有3亿种组合
------解决方案--------------------
Hash算法主要用于信息安全领域中加密,他可以把一些不同长度的信息转化成固定长度的128位编码。
MD5和SHA是目前应用最为广泛的Hash算法,主要应用文件校验、数字签名和鉴权协议等领域。
MD5和SHA属于非对称性加密算法,一般被认为是不可逆的。
Java在实现MD5和SHA-1算法加密时,主要使用了java.security.MessageDigest类。MessageDigest类为应用程序提供信息摘要算法的功能,例如MD5、SHA-1算法。
信息摘要是安全的单向散列函数,它接收任意大小的数据,输出固定长度的散列值。
我写的一个关于MD5加密的方法,如下:
Java code
public class Encryption {    /**     * @param args     */    public static void main(String[] args) {        System.out.println(Encryption.getMD5Str("1111"));    }    public static String getMD5Str(String str) {        MessageDigest messageDigest = null;                try {            messageDigest = MessageDigest.getInstance("MD5");            messageDigest.reset();            messageDigest.update(str.getBytes("UTF-8"));        } catch (NoSuchAlgorithmException e) {            System.out.println("NoSuchAlgorithmException caught!");            System.exit(-1);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }                byte [] byteArray = messageDigest.digest();        StringBuffer md5StringBuffer = new StringBuffer();                for(int i = 0; i < byteArray.length; ++ i) {            if(Integer.toHexString(0xFF & byteArray[i]).length() == 1) {                md5StringBuffer.append("0");                md5StringBuffer.append(Integer.toHexString(0xFF & byteArray[i]));            } else {                md5StringBuffer.append(Integer.toHexString(0xFF & byteArray[i]));            }        }                return md5StringBuffer.toString();    }}
  相关解决方案