Java生成32,16位的md5

java 文章 2023-08-23 10:00 1345 0 全屏看文

AI助手支持GPT4.0

package cn.sanshu.util;

import java.security.MessageDigest;

public class Md5Util {
	public static final String md5(String s) {
		char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

		try {
			byte[] strTemp = s.getBytes();
			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 byte0 = md[i];
				str[k++] = hexDigits[byte0 >>> 4 & 15];
				str[k++] = hexDigits[byte0 & 15];
			}

			log.debug("newmd5:{}", new String(str));
			return new String(str);
		} catch (Exception var10) {
			var10.printStackTrace();
			return null;
		}
	}

}


使用的时候:

32位:Md5Util.md5("aaaa");
16位:Md5Util.md5("aaaa").substring(8, 24);

为啥16位的md5是截取32位的呢?因为:

MD5算法生成的哈希值是一个128位的二进制数字,通常表示为32位的十六进制数。每个十六进制数对应4位二进制数。

由于MD5哈希值的32位表示形式中包含了所有128位的信息,因此可以通过截取其中的一部分来得到较短的表示形式。一般来说,截取中间的16位是比较常见的做法,因为它可以提供足够的唯一性和较短的表示形式。

需要注意的是,截取哈希值的任意一部分都会减少表示形式的唯一性。因此,在实际使用中,如果需要更高的唯一性和安全性,建议使用完整的32位MD5哈希值。

-EOF-

AI助手支持GPT4.0