md5 java 工具类_javamd5工具类

md5 java 工具类_javamd5工具类importjava.io.UnsupportedEncodingException;importjava.security.MessageDigest;importjava.util.HashMap;importjava.util.Map;importjava.util.concurrent.locks.ReentrantLock;importorg.apache.commons.l…

大家好,又见面了,我是你们的朋友全栈君。

import java.io.UnsupportedEncodingException;

import java.security.MessageDigest;

import java.util.HashMap;

import java.util.Map;

import java.util.concurrent.locks.ReentrantLock;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

//import sun.security.provider.MD5;

/**

* 简单计算MD5

*

* @author agapple 2015年3月26日 下午8:45:47

* @since 5.1.19

*/

public class MD5Utils {

private static final Log log = LogFactory.getLog(MD5Utils.class);

private static char[] digits = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘a’, ‘b’, ‘c’,

‘d’, ‘e’, ‘f’ };

private static Map rDigits = new HashMap(16);

static {

for (int i = 0; i < digits.length; ++i) {

rDigits.put(digits[i], i);

}

}

private static MD5Utils me = new MD5Utils();

private MessageDigest mHasher;

private ReentrantLock opLock = new ReentrantLock();

private MD5Utils(){

try {

mHasher = MessageDigest.getInstance(“md5”);

} catch (Exception e) {

throw new RuntimeException(e);

}

}

public static MD5Utils getInstance() {

return me;

}

public String getMD5String(String content) {

return bytes2string(hash(content));

}

public String getMD5String(byte[] content) {

return bytes2string(hash(content));

}

public byte[] getMD5Bytes(byte[] content) {

return hash(content);

}

/**

* 对字符串进行md5

*

* @param str

* @return md5 byte[16]

*/

public byte[] hash(String str) {

opLock.lock();

try {

byte[] bt = mHasher.digest(str.getBytes(“UTF-8”));

if (null == bt || bt.length != 16) {

throw new IllegalArgumentException(“md5 need”);

}

return bt;

} catch (UnsupportedEncodingException e) {

throw new RuntimeException(“unsupported utf-8 encoding”, e);

} finally {

opLock.unlock();

}

}

/**

* 对二进制数据进行md5

*

* @param str

* @return md5 byte[16]

*/

public byte[] hash(byte[] data) {

opLock.lock();

try {

byte[] bt = mHasher.digest(data);

if (null == bt || bt.length != 16) {

throw new IllegalArgumentException(“md5 need”);

}

return bt;

} finally {

opLock.unlock();

}

}

/**

* 将一个字节数组转化为可见的字符串

*

* @param bt

* @return

*/

public String bytes2string(byte[] bt) {

int l = bt.length;

char[] out = new char[l << 1];

for (int i = 0, j = 0; i < l; i++) {

out[j++] = digits[(0xF0 & bt[i]) >>> 4];

out[j++] = digits[0x0F & bt[i]];

}

if (log.isDebugEnabled()) {

log.debug(“[hash]” + (new String(out)));

}

return new String(out);

}

/**

* 将字符串转换为bytes

*

* @param str

* @return byte[]

*/

public byte[] string2bytes(String str) {

if (null == str) {

throw new IllegalArgumentException(“str is null”);

}

if (str.length() != 32) {

throw new IllegalArgumentException(“str.length() != 32”);

}

byte[] data = new byte[16];

char[] chs = str.toCharArray();

for (int i = 0; i < 16; ++i) {

int h = rDigits.get(chs[i * 2]).intValue();

int l = rDigits.get(chs[i * 2 + 1]).intValue();

data[i] = (byte) ((h & 0x0F) << 4 | (l & 0x0F));

}

return data;

}

}

以上代码就是用于md5的算法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159015.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SQL Server中的GUID

    GUID(Globaluniqueidentifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及CPU时钟的唯一数字生成的的一个16字节的二进制值。GUID

    2021年12月22日
  • 小米8手机相册中的图片怎么识别文字?[通俗易懂]

    小米8手机相册中的图片怎么识别文字?[通俗易懂]小米8大家都买了吗?最近新出的还是很好的,小米8手机相册中的图片怎么识别?对于用小米手机的人来说很简单,下面分享一个方法。1在手机上输入PDF阅读器,然后开始识别相册图片的文字2打开就是这样的界面,找到倒数第2个的小功能3选择拍照识别中的相册,接下来添加图片4这张是…

  • performClick()方法的使用「建议收藏」

    performClick()方法的使用「建议收藏」1.performClick()方法的作用:   performClick()方法是使用代码主动去调用控件的点击事件(模拟人手去触摸控件)2. 使用注意事项: 如果同时使用了view.setOnTouchListener()方法,则有可能存在拦截view.performClick()的响应事件, 因为当view.OnTouchEvent()在event.getAc

  • 弧度和角度的转换_角度与弧度的换算表格

    弧度和角度的转换_角度与弧度的换算表格这两天在看同事写的四叉树代码,当中用到了孤度和角度之间的转换,所以转载此文章进行了学习2009-12-01弧度与角度的关系一、角的两种单位“弧度”和“度”是度量角大小的两种不同的单位。就像“米”和

  • shiro的面试题_综合分析面试题

    shiro的面试题_综合分析面试题Shiro框架介绍shiro安全数据源有哪些:Shiro运行流程Shiro的优点比较SpringSecurity和Shiro简述Shiro的3个核心组件 1.Subject 2.SecurityManager 3.RealmsShiro认证过程Shiro授权过程Shiro如何自实现认证如何实现自实现授权如何配置在Spring中配置使用Shiro

    2022年10月14日
  • stringtokenizer类的hasmoretokens_java string equals

    stringtokenizer类的hasmoretokens_java string equalsStringTokenizer:字符串分隔解析类型属于:java.util包。1、构造函数。1.StringTokenizer(Stringstr):构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。2.StringTokenizer(Stringstr,Stringde…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号