java使用MD5密码加密

来源:互联网 发布:java如何实现线程安全 编辑:程序博客网 时间:2024/04/29 08:52

Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

import java.security.MessageDigest;import java.util.Random;/** * * @author Administrator */public class CipherUtil {    //十六进制下数字到字符的映射数组      private final static String[] hexDigits = {"0", "1", "2", "3", "4",        "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};    /**     * * 把inputString加密     */    public static String generatePassword(String inputString) {        return encodeByMD5(inputString);    }    /**     * 验证输入的密码是否正确     *     * @param password 加密后的密码     * @param inputString 输入的字符串     * @return 验证结果,TRUE:正确 FALSE:错误     */    public static boolean validatePassword(String password, String inputString) {        if (password.equalsIgnoreCase(encodeByMD5(inputString))) {            return true;        } else {            return false;        }    }    /**     * 对字符串进行MD5加密     */    private static String encodeByMD5(String originString) {        if (originString != null) {            try {                //创建具有指定算法名称的信息摘要                  MessageDigest md = MessageDigest.getInstance("MD5");                //使用指定的字节数组对摘要进行最后更新,然后完成摘要计算                  byte[] results = md.digest(originString.getBytes());                //将得到的字节数组变成字符串返回                  String resultString = byteArrayToHexString(results);                return resultString.toUpperCase();            } catch (Exception ex) {                ex.printStackTrace();            }        }        return null;    }    /**     * 转换字节数组为十六进制字符串     *     * @param 字节数组     * @return 十六进制字符串     */    private 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];    }    /**     * 获取salt值     *     * @return     */    public static String getSalt() {        Random random = new Random();        String SaltStr = "";        String s = null;        int num = 0;        while (num < 8) {            switch (random.nextInt(63)) {                case (0):                    s = "0";                    break;                case (1):                    s = "1";                    break;                case (2):                    s = "2";                    break;                case (3):                    s = "3";                    break;                case (4):                    s = "4";                    break;                case (5):                    s = "5";                    break;                case (6):                    s = "6";                    break;                case (7):                    s = "7";                    break;                case (8):                    s = "8";                    break;                case (9):                    s = "9";                    break;                case (10):                    s = "a";                    break;                case (11):                    s = "b";                    break;                case (12):                    s = "c";                    break;                case (13):                    s = "d";                    break;                case (14):                    s = "e";                    break;                case (15):                    s = "f";                    break;                case (16):                    s = "g";                    break;                case (17):                    s = "h";                    break;                case (18):                    s = "i";                    break;                case (19):                    s = "j";                    break;                case (20):                    s = "k";                    break;                case (21):                    s = "m";                    break;                case (23):                    s = "n";                    break;                case (24):                    s = "o";                    break;                case (25):                    s = "p";                    break;                case (26):                    s = "q";                    break;                case (27):                    s = "r";                    break;                case (28):                    s = "s";                    break;                case (29):                    s = "t";                    break;                case (30):                    s = "u";                    break;                case (31):                    s = "v";                    break;                case (32):                    s = "w";                    break;                case (33):                    s = "l";                    break;                case (34):                    s = "x";                    break;                case (35):                    s = "y";                    break;                case (36):                    s = "z";                    break;                case (37):                    s = "A";                    break;                case (38):                    s = "B";                    break;                case (39):                    s = "C";                    break;                case (40):                    s = "D";                    break;                case (41):                    s = "E";                    break;                case (42):                    s = "F";                    break;                case (43):                    s = "G";                    break;                case (44):                    s = "H";                    break;                case (45):                    s = "I";                    break;                case (46):                    s = "L";                    break;                case (47):                    s = "J";                    break;                case (48):                    s = "K";                    break;                case (49):                    s = "M";                    break;                case (50):                    s = "N";                    break;                case (51):                    s = "O";                    break;                case (52):                    s = "P";                    break;                case (53):                    s = "Q";                    break;                case (54):                    s = "R";                    break;                case (55):                    s = "S";                    break;                case (56):                    s = "T";                    break;                case (57):                    s = "U";                    break;                case (58):                    s = "V";                    break;                case (59):                    s = "W";                    break;                case (60):                    s = "X";                    break;                case (61):                    s = "Y";                    break;                case (62):                    s = "Z";                    break;            }            num++;            SaltStr = s + SaltStr;        }        return SaltStr;    }    public static void main(String[] args) {       System.out.println(CipherUtil.generatePassword("123")+"\t"+CipherUtil.getSalt());    }}
MD5加密部分的代码还可以简化成
 public final static String MD5(String s) {        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',            'a', 'b', 'c', 'd', 'e', 'f'};        try {            byte[] strTemp = s.getBytes();            //使用MD5创建MessageDigest对象            MessageDigest mdTemp = MessageDigest.getInstance("MD5");            mdTemp.update(strTemp);            byte[] md = mdTemp.digest();            int j = md.length;            char str[] = new char[j * 2];            int k = 0;            for (int i = 0; i < j; i++) {                byte b = md[i];                //System.out.println((int)b);                //将没个数(int)b进行双字节加密                str[k++] = hexDigits[b >> 4 & 0xf];                str[k++] = hexDigits[b & 0xf];            }            return new String(str);        } catch (Exception e) {            return null;        }    }


原创粉丝点击