MD5的工具类

好用请点赞收藏一波!

转发请带上作者名@LLLua和原文地址,谢谢!

没什么好说的,用就是了

public class MD5Util {

    private static String byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++)
            resultSb.append(byteToHexString(b[i]));

        return resultSb.toString();
    }

    private static String byteToHexString(byte b) {
        int n = b;
        if (n < 0)
            n += 256;
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigits[d1] + hexDigits[d2];
    }

    /**
     * 返回大写MD5
     *
     * @param origin
     * @param charsetname
     * @return
     */
    private static String MD5Encode(String origin, String charsetname) {
        String resultString = null;
        try {
            resultString = new String(origin);
            MessageDigest md = MessageDigest.getInstance("MD5");
            if (charsetname == null || "".equals(charsetname))
                resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
            else
                resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
        } catch (Exception exception) {
        }
        return resultString.toUpperCase();
    }

    public static String MD5EncodeUtf8(String origin) {
        origin = origin + PropertiesUtil.getProperty("password.salt", "");
        return MD5Encode(origin, "utf-8");
    }


    private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};

}

### Java MD5 工具类实现 为了方便地生成或验证MD5哈希值,在Java中可以通过编写一个工具类来简化这一过程。下面展示了一个基于`MessageDigest`的简单实用的MD5工具类。 #### 使用原生库创建MD5工具类 ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Md5Util { private static final String ALGORITHM = "MD5"; /** * 对字符串进行MD5加密. * * @param str 待加密的内容 * @return 加密后的16进制表示形式的结果 */ public static String encode(String str) { try { MessageDigest digest = MessageDigest.getInstance(ALGORITHM); byte[] hash = digest.digest(str.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte b : hash) { String hex = Integer.toHexString(0xff & b); if (hex.length() == 1) hexString.append('0'); hexString.append(hex); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e.getMessage(), e); } } } ``` 此段代码定义了一个名为`Md5Util`的静态辅助函数,它接收一个待处理的字符串参数并返回其对应的MD5散列值[^3]。 #### 利用Apache Commons Codec库优化编码方式 除了上述方法外,还可以借助于成熟的开源框架如Apache Commons Codec中的`DigestUtils`来进行更简洁的操作: 首先需添加Maven依赖项到项目的pom.xml文件内: ```xml <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency> ``` 接着就可以直接调用`DigestUtils.md5Hex()`完成相同的功能而无需手动构建逻辑了[^4]: ```java import org.apache.commons.codec.digest.DigestUtils; public class SimpleMd5Example { public static void main(String[] args){ System.out.println(DigestUtils.md5Hex("test")); // 输出测试字符串"test"经过MD5运算之后得到的十六进制字符串 } } ``` 通过这种方式不仅减少了自定义实现可能带来的错误风险,同时也提高了开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值