发布时间:2022-11-06 文章分类:编程知识 投稿人:赵颖 字号: 默认 | | 超大 打印

MD5 常用于密码加密,例如,在注册时可以将密码转为 MD5 再放入数据库,在登录时校验登录密码和数据库存放的加密密码是否一致,来保证密码在数据库中存储的安全性。

下面介绍使用 Java 自带的加密类 MessageDigest 来加密字符:

/**
 * MD5生成器
 *
 * 1.MD5(message-digest algorithm 5)信息摘要算法,
 *   它的长度一般是32位的16进制数字符串(如81dc9bdb52d04dc20036dbd8313ed055)
 * 2.由于系统密码明文存储容易被黑客盗取
 * 3.应用:注册时,将密码进行md5加密,存到数据库中,防止可以看到数据库数据的人恶意篡改。
 *       登录时,将密码进行md5加密,与存储在数据库中加密过的密码进行比对
 * 4.md5不可逆,即没有对应的算法,从产生的md5值逆向得到原始数据。
 *   但是可以使用暴力破解,这里的破解并非把摘要还原成原始数据,如暴力枚举法。
 */
public class MD5Utils {
    public static String md5(String password) {
        //生成一个md5加密器
        get="_blank">try {
            //创建具有指定算法名称如MD5的摘要
            MessageDigest md = MessageDigest.getInstance("MD5");
            //使用指定的字节数组更新摘要
            md.update(password.getBytes());
            //BigInteger 将8位数的字符串转成16位的字符串,得到的字符串形式是哈希码值
            //BigInteger(参数1, 参数2) 参数1:1表示正数 0表示零 -1表示负数
            //md.digest() 进行哈希计算并返回一个字节数组
            return new BigInteger(1, md.digest()).toString(16);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
}