本文实例讲述了 java 实现的 MD5 摘要算法分享给大家供大家参考, 具体如下:
- package com.soufun.com;
- import java.io.UnsupportedEncodingException;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- /**
- * @author WHD
- */
- public class MD5Test {
- // MD5 单向加密
- public static void main(String[] args) throws NoSuchAlgorithmException,
- UnsupportedEncodingException {
- String str = "hellomd 摘要算法开始";
- System.out.println("原始值" + str);
- System.out.println("加密后的" + MD5Test.afterMD5(str));
- String digest = MD5Test.afterMD5(str);
- System.out.println(digest.equals(MD5Test.afterMD5(str)));
- }
- public static String afterMD5(String str) throws NoSuchAlgorithmException,
- UnsupportedEncodingException {
- // 获取 MD5 加密对象, 还可以获取 SHA 加密对象
- MessageDigest md5 = MessageDigest.getInstance("MD5");
- // 将输入的信息使用指定的编码方式获取字节
- byte[] bytes = str.getBytes("UTF-8");
- // 使用 md5 类来获取摘要, 也就是加密后的字节
- md5.update(bytes);
- byte[] md5encode = md5.digest();
- StringBuffer buffer = new StringBuffer();
- for (int i = 0; i < md5encode.length; i++) {
- // 使用 & 0xff 不足 24 高位, 因为只占了 8 低位
- int val = ((int) md5encode[i]) & 0xff;
- if (val < 16) {
- buffer.append("0");
- }
- // 以十六进制 (基数 16) 无符号整数形式返回一个整数参数的字符串表示形式
- buffer.append(Integer.toHexString(val));
- }
- return buffer.toString();
- }
- }
使用 org.apache.commons.codec.digest.DigestUtilsorg.apache.commons.codec.digest.DigestUtils 来实现 md5 加密
在 maven 中的配置:
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- <version>1.4</version>
- </dependency>
这里注意 1.2 版本和 1.4 版本的区别很大, 因为 1.4 中扩展了很多方法.
具体代码如下:
- public static String afterMd5(String str){
- try {
- String md5 = DigestUtils.md5Hex(str.getBytes("UTF-8"));
- return md5;
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
来源: http://www.phperz.com/article/18/0225/358942.html