Md5Util 加密工具类

来源:互联网 发布:淘宝一元秒杀验证码 编辑:程序博客网 时间:2024/06/11 16:16

在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希望能抛砖引玉。

简述

MD5: 全称为message digest algorithm 5(信息摘要算法), 可以进行加密, 但是不能解密, 属于单向加密, 通常用于文件校验Base64: 把任意序列的8为字节描述为一种不易为人识别的形式, 通常用于邮件、http加密. 登陆的用户名和密码字段通过它加密, 可以进行加密和解密.

(一)消息摘要简介
一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。消息摘要是一种与消息认证码结合使用以确保消息完整性的技术。主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4、MD5、SHA-1。

小编自己也封装了一个自己常用的Md5进行平常的加密类
具体代码如下:

package utils;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.nio.MappedByteBuffer;import java.nio.channels.FileChannel;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** * MD5加密工具 * * @author Administrator */public class Md5Util {    private static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7',            '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};    private static MessageDigest messagedigest = null;    static {        try {            messagedigest = MessageDigest.getInstance("MD5");        } catch (NoSuchAlgorithmException e) {            // logger.error("MD5FileUtil messagedigest初始化失败", e);        }    }    /**     * 获取文件的MD5值     *     * @param file     * @return     * @throws IOException     */    public static String getFileMD5String(File file) throws IOException {        return getFileMD5String(file, 0, -1);    }    /**     * 获取文件的MD5值     *     * @param file     * @param start     * @param length     * @return     * @throws IOException     */    public static String getFileMD5String(File file, long start, long length)            throws IOException {        FileInputStream fis = new FileInputStream(file);        FileChannel ch = fis.getChannel();        long remain = file.length() - start;        if (length < 0 || length > remain) {            length = remain;        }        MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY,                start, length);        messagedigest.update(byteBuffer);        return bufferToHex(messagedigest.digest());    }    /**     * 获取字符串的MD5加密的结果     *     * @param s     * @return     */    public static String getMD5String(String s) {        return getMD5String(s.getBytes());    }    public static String getMD5String(byte[] bytes) {        messagedigest.update(bytes);        return bufferToHex(messagedigest.digest());    }    private static String bufferToHex(byte bytes[]) {        return bufferToHex(bytes, 0, bytes.length);    }    private static String bufferToHex(byte bytes[], int m, int n) {        StringBuffer stringbuffer = new StringBuffer(2 * n);        int k = m + n;        for (int l = m; l < k; l++) {            appendHexPair(bytes[l], stringbuffer);        }        return stringbuffer.toString();    }    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {        char c0 = hexDigits[(bt & 0xf0) >> 4];        char c1 = hexDigits[bt & 0xf];        stringbuffer.append(c0);        stringbuffer.append(c1);    }}
原创粉丝点击