java版md5加密

来源:互联网 发布:网络运维与管理 编辑:程序博客网 时间:2024/05/22 14:19
简介
      MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。
     它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。

     MD5加密的特点是不可逆的,也就是说只能加密不能解密,比如说我们对用户注册的密码进行了md5加密,如果用户以后忘记了密码,那系统只能让用户废弃以前的旧密码,重置成新密码。也就是说旧密码是不能通过解密操作找回的。

     废话不多说,我们来看代码:

package com.wx.utils;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** * MD5加密工具类 * @author wx  * 2015-09-22 */public class MD5Utils {    /**     * 进行MD5加密     * @param pwd 需要加密的字符串     * @return String 加密后的字符串     */    public static String getPwd(String pwd) {    String hexString = "";//存放加密后的结果        try {            // 创建加密对象            MessageDigest digest = MessageDigest.getInstance("md5");            // 调用加密对象的方法,加密的动作已经完成            byte[] bs = digest.digest(pwd.getBytes());            for (byte b : bs) {                // 第一步,将数据全部转换成正数:                // 解释:为什么采用b&255                /*                 * b:它本来是一个byte类型的数据(1个字节) 255:是一个int类型的数据(4个字节)                 * byte类型的数据与int类型的数据进行运算,会自动类型提升为int类型 eg: b: 1001 1100(原始数据)                 * 运算时: b: 0000 0000 0000 0000 0000 0000 1001 1100 255: 0000                 * 0000 0000 0000 0000 0000 1111 1111 结果:0000 0000 0000 0000                 * 0000 0000 1001 1100 此时的temp是一个int类型的整数                 */                int temp = b & 255;                // 第二步,将所有的数据转换成16进制的形式                // 注意:转换的时候注意if正数>=0&&<16,那么如果使用Integer.toHexString(),可能会造成缺少位数                // 因此,需要对temp进行判断                if (temp < 16 && temp >= 0) {                    // 手动补上一个"0"                    hexString = hexString + "0" + Integer.toHexString(temp);                } else {                    hexString = hexString + Integer.toHexString(temp);                }            }        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        }        return hexString;    }    public static void main(String[] args) {        String pwd = MD5Utils.getPwd("test123");        System.out.println(pwd);    }}
=============================

反复运行的结果如下,每次加密的结果都是一样的



原创粉丝点击