PwdEncoder.java 接口类
package com.common.security.encoder;

/**
* 密码加密接口
*/
public interface PwdEncoder {
/**
* 密码加密
*
* @param rawPass
* 未加密密码,null作为空串
* @return 加密后密码
*/
public String encodePassword(String rawPass); /**
* 密码加密
*
* @param rawPass
* 未加密密码,null作为空串
* @param salt
* 混淆码
* @return
*/
public String encodePassword(String rawPass, String salt); /**
* 验证密码是否正确
*
* @param encPass
* 加密密码
* @param rawPass
* 未加密密码,null作为空串
* @return true:密码正确;false:密码错误
*/
public boolean isPasswordValid(String encPass, String rawPass); /**
* 验证密码是否正确
*
* @param encPass
* 加密密码
* @param rawPass
* 未加密密码,null作为空串
* @param salt
* 混淆码
* @return true:密码正确;false:密码错误
*/
public boolean isPasswordValid(String encPass, String rawPass, String salt);
}

  

Md5PwdEncoder.java
package com.common.security.encoder;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.binary.Hex; /**
* MD5密码加密
*/
public class Md5PwdEncoder implements PwdEncoder {
public String encodePassword(String rawPass) {
return encodePassword(rawPass, defaultSalt);
} public String encodePassword(String rawPass, String salt) {
String saltedPass = mergePasswordAndSalt(rawPass, salt, false);
MessageDigest messageDigest = getMessageDigest();
byte[] digest;
try {
digest = messageDigest.digest(saltedPass.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("UTF-8 not supported!");
}
return new String(Hex.encodeHex(digest));
} public boolean isPasswordValid(String encPass, String rawPass) {
return isPasswordValid(encPass, rawPass, defaultSalt);
} public boolean isPasswordValid(String encPass, String rawPass, String salt) {
if (encPass == null) {
return false;
}
String pass2 = encodePassword(rawPass, salt);
return encPass.equals(pass2);
} protected final MessageDigest getMessageDigest() {
String algorithm = "MD5";
try {
return MessageDigest.getInstance(algorithm);
} catch (NoSuchAlgorithmException e) {
throw new IllegalArgumentException("No such algorithm ["
+ algorithm + "]");
}
} /**
* Used by subclasses to extract the password and salt from a merged
* <code>String</code> created using
* {@link #mergePasswordAndSalt(String,Object,boolean)}.
* <p>
* The first element in the returned array is the password. The second
* element is the salt. The salt array element will always be present, even
* if no salt was found in the <code>mergedPasswordSalt</code> argument.
* </p>
*
* @param mergedPasswordSalt
* as generated by <code>mergePasswordAndSalt</code>
*
* @return an array, in which the first element is the password and the
* second the salt
*
* @throws IllegalArgumentException
* if mergedPasswordSalt is null or empty.
*/
protected String mergePasswordAndSalt(String password, Object salt,
boolean strict) {
if (password == null) {
password = "";
}
if (strict && (salt != null)) {
if ((salt.toString().lastIndexOf("{") != -1)
|| (salt.toString().lastIndexOf("}") != -1)) {
throw new IllegalArgumentException(
"Cannot use { or } in salt.toString()");
}
}
if ((salt == null) || "".equals(salt)) {
return password;
} else {
return password + "{" + salt.toString() + "}";
}
} /**
* 混淆码。防止破解。
*/
private String defaultSalt; /**
* 获得混淆码
*
* @return
*/
public String getDefaultSalt() {
return defaultSalt;
} /**
* 设置混淆码
*
* @param defaultSalt
*/
public void setDefaultSalt(String defaultSalt) {
this.defaultSalt = defaultSalt;
}
}

  

调用:

public static void main(String[] args) {
PwdEncoder pwdEncoder=new Md5PwdEncoder();
System.out.println(pwdEncoder.encodePassword("11111"));
}

  

JAVA代码MD5加密方法的更多相关文章

  1. java中md5加密方法

    package com.func; import java.io.UnsupportedEncodingException;import java.math.BigInteger;import jav ...

  2. Java生成MD5加密字符串代码实例

    这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下   (1)一般使用的数据库中都会保存用 ...

  3. Java实现MD5加密及解密的代码实例分享

    链接:http://www.jb51.net/article/86027.htm Java实现MD5加密及解密的代码实例分享 作者:厦门大学陈黎栋 字体:[增加 减小] 类型:转载 时间:2016-0 ...

  4. 使用JAVA进行MD5加密后所遇到的一些问题

    前言:这几天在研究apache shiro如何使用,这好用到了给密码加密的地方,就碰巧研究了下java的MD5加密是如何实现的,下面记录下我遇到的一些小问题. 使用java进行MD5加密非常的简单,代 ...

  5. Java实现MD5加密_字符串加密_文件加密

    Java实现MD5加密,具体代码如下: package com.bstek.tools; import java.io.FileInputStream; import java.io.IOExcept ...

  6. java 实现md5加密的三种方式与解密

      java 实现md5加密的三种方式 CreateTime--2018年5月31日15点04分 Author:Marydon 一.解密 说明:截止文章发布,Java没有实现解密,但是已有网站可以免费 ...

  7. Java C# MD5 加密串一致性

    Java C# MD5 加密串一致性   Java public final static String md5(String s) { char hexDigits[] = { '0', '1',  ...

  8. .net系统的MD5加密方法

    /// <summary>/// .net系统的MD5加密方法/// </summary>/// <param name="strIN">< ...

  9. python文件的md5加密方法

    本文实例讲述了python文件的md5加密方法.分享给大家供大家参考,具体如下: 一.简单模式: from hashlib import md5 def md5_file(name): m = md5 ...

随机推荐

  1. [No0000183]Parallel Programming with .NET-How PLINQ processes an IEnumerable<T> on multiple cores

    As Ed Essey explained in Partitioning in PLINQ, partitioning is an important step in PLINQ execution ...

  2. cocoa开发Mac小试笔记

    急需纠正自己的错误认识,Mac开发和iOS开发UI显示.事件交互.生命周期等存在极大的差距 首先点击事件NSButton和UIButton完全是两个不同的东西 列表UITableView和NSTabl ...

  3. protobuffer、gRPC、restful gRPC的相互转化

    转自:https://studygolang.com/articles/12510 文档 grpc中文文档 grpc-gateway,restful和grpc转换库 protobuf 官网 proto ...

  4. LeetCode 748 Shortest Completing Word 解题报告

    题目要求 Find the minimum length word from a given dictionary words, which has all the letters from the ...

  5. 2018/04/14 理解oAuth2.0

    最近都近没有更新博客了,卡在 oAuth 上了. 之前公司做统一身份的认证,不了解 oAuth 的我在这卡了两天. 于是决定仔细研究原理,理论指导实践. -- 什么是 oAuth ? 简单来说 oAu ...

  6. 《Mysql 引擎》

    一:什么是引擎? - 就是一种数据存取和处理方式. - 在 MySQL 中,引擎是以"插件式"存在的,使我们可以很方便的使用各种引擎. 二:怎么查看数据库支持的引擎? - show ...

  7. .net core开发工具与SDK

    一.开发工具 开发工具使用Visual Studio 2017 下载官网:https://visualstudio.microsoft.com/zh-hans/vs/ 相关的安装已经有很多文章介绍过, ...

  8. g++编译多个文件

    注意:头文件不用去指定,其是由#include命令进行管理的,只需要编译cpp文件就可以了: 举例: 有以下三个文件: a.h a.cpp main.cpp 那么编译可以有以下两种方式: 1.分开编译 ...

  9. InnoDB Next-Key Lock

    InnoDB有三种行锁的算法: 1,Record Lock:单个行记录上的锁 2,Gap Lock:间隙锁,锁定一个范围,但不包括记录本身 3,Next-Key Lock:Record Lock + ...

  10. DNS搜索

    dig(Domain Information Groper) dig @dnsserver name querytype 如果你设置的dnsserver是一个域名,那么dig会首先通过默认的上连DNS ...