初识MD5

来源:互联网 发布:网络著作权侵权行为 编辑:程序博客网 时间:2024/06/15 04:29

MD5——(Nice to meet U)

最近在项目中需要用到MD5进行对密码加密,所以再找资料的同时记下这篇不完美的笔记,以供自己日后整理复习使用。

注:本文以java为基础展开讨论,未经允许不得转载~转载请注明出处

  • MD5Nice to meet U
  • what is the MD5
  • How to 使用
  • Tips


what is the MD5?

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

How to 使用?

    /**利用MD5进行加密     * @param originString待加密的字符串     * @return  result加密后的字符串     * @throws NoSuchAlgorithmException  没有这种产生消息摘要的算法     * @throws UnsupportedEncodingException       */public class Md5 {    public static String getEncryption(String originString) throws UnsupportedEncodingException {        String result = "";        if (originString != null) {            try {                // 加密方式为MD5                MessageDigest md = MessageDigest.getInstance("MD5");                // 进行加密运算                byte bytes[] = md.digest(originString.getBytes("UTF-8"));                for (int i = 0; i < bytes.length; i++) {                    // 将整数转换成十六进制形式的字符串 这里与0xff进行与运算的原因是保证转换结果为32位                    String str = Integer.toHexString(bytes[i] & 0xFF);                    result += str;                }            } catch (NoSuchAlgorithmException e) {                e.printStackTrace();            }        }        return result;    }}

Tips:

代码中这句需要说明一下:

String str = Integer.toHexString(bytes[i] & 0xFF);

上面是将byte[]转化十六进制的字符串,注意这里bytes[i] & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串。

b[ i ] & 0xFF运算后得出的是个int,也就是说8位的byte变成32位的int采用了二进制的如果不和0xFF进行与运算,则会自动补位,从而导致数据无我们想要的不一致。

具体的可参考 怎么用Integer.toHexString(int)得到byte类型的十六进制字符串形式顺便巩固一下大学数字电路知识。

原创粉丝点击