Java生成32,16位的md5

java 文章 2023-08-23 10:00 1572 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


国内超级便宜服务器

摸鱼人热门新闻聚合

钻级赞助商 我要加入

开发者在线工具

第三方支付技术请加QQ群

相关文章
Java使用socket代理代码
应用启动加速-并发初始化spring bean
day04_数组
java中有哪些常用的JVM参数呢?
内部类和外部类变量重名时--如何访问变量呢?
随便看看
怎么添加小程序支付功能? 4291
教育科技公司申请微信支付被拒绝? 4673
微信公众号免300认证教程 5751
小程序已经上线,作为管理员无法在小程序数据助手查看数据? 5159
小程序广告组件通过审核,但是小程序内没有显示广告? 4932
企业微信通讯录账号被管理员误/恶意删除,怎么办? 9355
问题? 8880
如何快速搭建抽奖助手小程序(无需代码知识) 6015
许涛 大哥在吗, 要解冻小程序的时候提示信息主体不一致, 能帮忙看下吗? 7317
小程序搜一搜全称搜索不显示 麻烦解决一下!谢谢 6640