Android中MD5加密

MD5是不可逆的加密算法,也就是无法解密,主要用于客户端的用户密码加密。无论原始字符串是什么,MD5加密串都是32位的十六进制字符串。MD5较容易破解,所以我们一般使用加盐方式多层进行加密操作。

MD5加密算法工具类如下。

public class MD5Util {

    public static String encrypt(String raw) {
        String md5Str = raw;
        try {
            MessageDigest md = MessageDigest.getInstance("MD5"); // 创建一个MD5算法对象
            md.update(raw.getBytes()); // 给算法对象加载待加密的原始数据
            byte[] encryContext = md.digest(); // 调用digest方法完成哈希计算
            int i;
            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < encryContext.length; offset++) {
                i = encryContext[offset];
                if (i < 0) {
                    i += 256;
                }
                if (i < 16) {
                    buf.append("0");
                }
                buf.append(Integer.toHexString(i)); // 把字节数组逐位转换为十六进制数
            }
            md5Str = buf.toString(); // 拼装加密字符串
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return md5Str.toUpperCase(); // 输出大写的加密串
    }

}

多层加密算法是这样的。假设我们加密字符串是String a;我们有三个盐,分别是String x,String y,String z。我们先让a字符串拼接上x,进行一次MD5加密;在加密后的字符串上加上y,再进行一次MD5加密;最后在第二次加密后的字符串上拼接上z,再进行一次MD5加密。这样就算被破译了一次,对方不知道我们的x,y,z分别是什么,并且三个值同时作用,可能的情况也会呈几何倍数增加,所以安全度会大大提高。同样的,我们可以使用动态附加传的方式,让x,y,z由后台提供,则可以更好的加大安全度。该方法也可以用于之后讲到的一些可解密的加密算法。之后不再赘述。大家可以参考这里的内容进行应用。

猜你喜欢

转载自blog.csdn.net/weixin_38322371/article/details/115028800
今日推荐