Java生成十六进制的MD5加密字符串

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @author joymufeng
 */
public class Md5 {
    private static MessageDigest digester;

    static {
        try {
            digester = MessageDigest.getInstance("MD5");
        }catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    /**
     * 将任意的字符串进行md5加密,并返回加密后的十六进制字符串。
     * 需要注意,MessageDigest是非线程安全的,所以需要使用synchronized同步。
     * @param str 待加密字符串
     * @return 返回md5加密后的十六进制字符串
     */
    public static String encrypt(String str) {
        if (digester == null || str == null || str.length() == 0) {
            return null;
        }
        
        synchronized (digester){
            try {
                digester.update(str.getBytes("UTF-8"));
                String s1 = new BigInteger(1, digester.digest()).toString(16);
                //补齐BigInteger省略的前置0
                return new String(new char[32 - s1.length()]).replace("\0", "0") + s1;
            } catch (Exception e) {
                //一般不会有异常抛出, 该死的Java受检异常,导致丑陋的代码
            }
        }

        return null;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java爬坑系列

【Java入门提高篇】Day29 Java容器类详解(十一)LinkedHashSet详解

  当当当当当当当,本来打算出去浪来着,想想还是把这个先一起写完吧,毕竟这篇的主角跟我一样是一个超级偷懒的角色——LinkedHashSet,有多偷懒?看完你就...

8630
来自专栏java达人

数字的陷阱

Java中对数字的处理,如四舍五入,如加减乘除,貌似是一个很基础很简单的知识点,但是如果你没有对他进行充分了解,很容易掉进它的陷阱里。 1、浮点数运算 先来看一...

19580
来自专栏Python小屋

Python实现字符串与指定密钥循环异或加解密

异或运算在很多密码学算法中都有不同程度的应用,其运算特定在于一个数和另一个数连续异或两次仍得到原来的数。在实际使用中,因为要加密的信息和所使用的密钥在大多数情况...

40360
来自专栏闻道于事

Java常用工具类之RegexpUtils,正则表达式工具类

package com.test.core.util; import org.apache.log4j.Logger; import org.apache.o...

39870
来自专栏10km的专栏

java:java.util.Map和java.util.Set的Key类型转换

google的guava项目提对Map供了丰富强大的转换功能(参见guava jar包中的com.google.common.collect.Maps ) ...

24950
来自专栏Java成神之路

JavaUtil_04_验证码生成器

通过一个随机串,一个指定串(如accesskey),和当前时间来进行验证码的生成,期间还经过SHA1加密。如网易云信的短信验证码生成器:

17120
来自专栏每日一篇技术文章

Swift3.0 - 字典

6520
来自专栏BaronTalk

RxJava系列四(过滤操作符)

前面一篇文章中我们介绍了转换类操作符,那么这一章我们就来介绍下过滤类的操作符。顾名思义,这类operators主要用于对事件数据的筛选过滤,只返回满足我们条件的...

410100
来自专栏公众号_薛勤的博客

Java实现一个简单的加密解密方法

加密方法 String cipherte=Enande.encrypt(content, pass);

18120
来自专栏码匠的流水账

聊聊rocketmq的AsyncAppender

org/apache/rocketmq/logging/inner/LoggingBuilder.java

11310

扫码关注云+社区

领取腾讯云代金券