Java生成32,16位的md5

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

相关文章
springJdbcTemplate 执行 sql中包含in的用法
20220722-Java中this关键字
Java 通过API 向微信公众号用户发送语音消息的步骤和代码实现
非常全的日期格式
细说 Deque 以及用法和注意点
随便看看
企业微信通讯录账号被管理员误/恶意删除,怎么办? 9391
问题? 8911
如何快速搭建抽奖助手小程序(无需代码知识) 6041
许涛 大哥在吗, 要解冻小程序的时候提示信息主体不一致, 能帮忙看下吗? 7344
小程序搜一搜全称搜索不显示 麻烦解决一下!谢谢 6671
我的小程序广告收款主体是个体工商户,每个月邮寄两次发票很是麻烦,我年底的时候打包邮寄一次可以么? 6000
如何解决渲染层网络错误Failed to load media? 17277
小程序找号找回 释放昵称? 3151
我的小程序广告主收入5301,实际进账4406,是怎么回事呀? 3014
删除部分微信用户个人数据的通知,怎么删除? 6262