java对字符串密码的MD5加密与验证

Java项目功能模块开发 专栏收录该内容
9 篇文章 1 订阅

 java对字符串密码的MD5加密与验证

  MD5 即Message-Digest Algorithm 5(信息-摘要 算法  5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译 摘要算法 、哈希算法),主流编程语言普遍已有MD5实现。

   将数据(如汉字)运算为另一固定长度值是杂凑算法的基础原理,MD5的前身有MD2、MD3MD4

        本实例介绍用MD5进行加密和验证,将输入字符串通过MD5加密成另一个字符串,而且根据新的字符串无法获得原字符串,但可以在不知道原始密码的情况下进行密码验证。

 

关键技术:

*通过Java.security.MessageDigest的静态方法getInstance创建具有指定算法名称的信息摘要,参数为算法名,传入“MD5”则表示将使用MD5算法。

*MessageDigest的digest实例方法使用指定的字节数组对摘要进行最后更新,然后完成摘要计算,返回存放哈希值结果的季节数组,这个数组就是MD5加密产品。

*将加密后的字节数组转换成十六进制的字符窜,形成最终的密码。

*当输入字符串经过MD5加密后,得到的字符串与密码一样,则认为密码验证通过。

 

实例演示:

  /**  对字符串进行MD5加密     */
  public class MD5Util {
    private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

    /**
     * 转换字节数组为16进制字串
     * 
     * @param b
     *            字节数组
     * @return 16进制字串
     */

    public static String byteArrayToHexString(byte[] b) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }

/** 将一个字节转化成十六进制形式的字符串     */
    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0)
            n = 256 + n;
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }

  /**  对字符串进行MD5加密     */   
    public static String MD5Encode(String origin) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            resultString = byteArrayToHexString(md.digest(resultString
                    .getBytes()));
        } catch (Exception ex) {
        }
        return resultString;
    }

     /**
     * 验证前端输入的密码是否正确,input为前端输入的密码字符串,password为数据库读取的密码
     * 
     * @param b
     *            字节数组
     * @return 16进制字串
     */

    public static boolean isValidate(String input,String password){      
        boolean status = false;
        if(MD5Util.MD5Encode(input).equals(password)){
            status = true;
        }else{
            status = false;
        }         
        return status;
    }

   /**  主方法测试     */    
    public static void main(String[] args) {         
        System.out.println(MD5Encode("123"));         
        boolean b = MD5Util.isValidate("123", "21232f297a57a5a743894a0e4a801fc3");
        System.out.println(b);        
    }
}
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值