MD5算法简易实现

MD5——Message Digest Algorithm MD5(消息摘要算法)

MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

代码实现

加盐——即在MD5基础上进一步加密,提高安全性,这里只是实现简易的加盐

public class MD5{
    public static void main(String[] args) {
        System.out.println(getMD5("a"));
    }
    public static String getMD5(String str){
        String md5 = null;
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] buf = md.digest(str.getBytes());//生成Hash值字节数组
            //看看生成的字节数组长什么样?
            StringBuffer result = new StringBuffer();
            for (byte b : buf){
                result.append(b);
                result.append(" ");
            }
            System.out.println(result.toString());

            StringBuffer sb = new StringBuffer();
            int num;
            for (byte b : buf){
                num = b;
                //简易加盐,如果num为负,加上256,确保有两位,如果小于16(F=15),表示不足2位,则添0
                if (num < 0)
                    num += 256;
                if (num < 16)
                    sb.append(0);
                sb.append(Integer.toHexString(num));//转化为16进制
            }
            md5 = sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return md5;
    }
}

输出结果:
12 -63 117 -71 -64 -15 -74 -88 49 -61 -103 -30 105 119 38 97
0cc175b9c0f1b6a831c399e269772661

猜你喜欢

转载自blog.csdn.net/dh554112075/article/details/80790455