日期:2014-05-19  浏览次数:20748 次

什么是对密码作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();
    }
}