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的算法

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

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

(0)
上一篇 2022年7月14日 下午4:16
下一篇 2022年7月14日 下午4:16


相关推荐

  • 【Robo 3T】MongoDB可视化工具– Robo 3T使用教程

    【Robo 3T】MongoDB可视化工具– Robo 3T使用教程MongoDB 可视化工具 Robo3T 使用教程 1 到官网下载 Robo3T 网址如 https robomongo org download 2 下载安装成功后 打开后点击左上角的 create 创建一个连接 给该连接起个名字 如 localhost 使用默认地址 localhost 和端口 27017 即可 点击 save 保存 如下图所示 3 点击保存后 就会在界面看到如下图所示 4 双击 localhost 连接到 MongoDB 并进入交互界面 我们可以看

    2026年3月16日
    2
  • Unity+Android GET和POST方式的简单实现API请求(人像动漫化)

    Unity+Android GET和POST方式的简单实现API请求(人像动漫化)Unity与Android的简单交互,Unity打开Android相册并调用

    2026年1月22日
    5
  • Css Filter Alpha 属性详解

    Css Filter Alpha 属性详解Alpha 设置透明层次 blur 创建高速度移动效果 即模糊效果 Chroma 制作专用颜色透明 DropShadow 创建对象的固定影子 FlipH 创建水平镜像图片 FlipV 创建垂直镜像图片 glow 加光辉在附近对象的边外 gray 把图片灰度化 invert 反色 light 创建光源在对象上 mask 创建透明掩膜在对象上 shadow 创建偏移固定影子 w

    2026年3月16日
    3
  • 什么是MVC软件架构模式_mvc架构的设计思路

    什么是MVC软件架构模式_mvc架构的设计思路缘起:作为程序员,很容易天天被业务追逐着,抽不开时间修炼。有一天突然停了一下,忽地就会有一种怅然的感觉,过去的那些日子我学到了什么?有人很认真地说自己有10年经验,有人笑说你不过是一年经验用了10年而已。

    2022年10月10日
    5
  • spring项目无法引入@Resource注解问题[通俗易懂]

    spring项目无法引入@Resource注解问题[通俗易懂]问题:在spring项目中引入@Resource注解的时候,有红色下划线错误,而且输入注解的时候不能出现自动代码补全。解决办法:Spring项目中缺少javax.annotation包的依赖。在maven配置文件pom.xml中加入依赖。<!– https://mvnrepository.com/artifact/javax.annotation/javax.annotation…

    2022年6月13日
    145
  • linux ubuntu安装_vscode electron

    linux ubuntu安装_vscode electron环境:ubuntux86_64apache2.4mysql5.7php7.0方法一:这个方法是我安装成功的方法,所以写在第一个.步骤:1.在官网https://code.visualstudio.com/Download下载相应的deb包到自己电脑上我下载的是64bit的.2.打开相应目录的终端,执行命令sudodpkg-icode_1.2…

    2026年1月15日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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