Java中的MD5算法

来源:互联网 发布:linux下如何同步时钟 编辑:程序博客网 时间:2024/06/05 17:06

一、MD5是什么
Message-Digest Algorithm 5(信息-摘要算法)。经常说的“MD5加密”,就是它→信息-摘要算法。

在下载一下东西时,经常在一些压缩包属性里,看到md5值。而且这个下载页面,很可能会在某一个地方,写了一句,此文件的MD5值为XXXXXXXXX。这有什么作用呢?

白话白话:md5,其实就是一中算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一的。

所以,有人修过压缩包后,就会生成新的串,这时就可以拿网站提供的串和新生成的串对比,如果不同,那就是被人修过过了。

这里大牛的博客介绍的很清楚。

二、下面是实现代码

import java.security.MessageDigest;public class MD5Test {    //main测试类    public static void main(String[] args) {        String result = getMD5("123456789");        System.err.println(result);    }    /**     * 生成md5     * @param message     * @return     */    public static String getMD5(String message) {        String md5str = "";        try {            //1 创建一个提供信息摘要算法的对象,初始化为md5算法对象            MessageDigest md = MessageDigest.getInstance("MD5");            //2 将消息变成byte数组            byte[] input = message.getBytes();            //3 计算后获得字节数组,这就是那128位了            byte[] buff = md.digest(input);            //4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串            md5str = bytesToHex(buff);        } catch (Exception e) {            e.printStackTrace();        }        return md5str;    }    /**     * 二进制转十六进制     * 因为一个byte对应8位二进制,取值范围是-128~127     * 所以一个byte对应两个十六进制数字     *      * @param bytes     * @return     */    public static String bytesToHex(byte[] bytes) {        StringBuffer md5str = new StringBuffer();        //把数组每一字节换成16进制连成md5字符串        int digital;        for (int i = 0; i < bytes.length; i++) {             digital = bytes[i];            if(digital < 0) {                digital += 256;            }            if(digital < 16){                md5str.append("0");            }            md5str.append(Integer.toHexString(digital));        }        return md5str.toString().toUpperCase();    }}

另外,一个byte占8个二进制位,取值范围是 -128~127

0 0
原创粉丝点击