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. 微信jssdk上传图片,一张一张的上传 和 一次性传好几张

    //html模板 <div class="zhaopin_3_2"> <div id="bbb"></div> <im ...

  2. 洛谷P1086 花生采摘【模拟】

    题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都很开心,因为花生正是他 ...

  3. SQL中的Continue和Break

    x 在Sql Server中,sql语句包含While循环的时候,肯定都或多或少的用到Continue和Break... 下面撸了一个小Demo , Begin ),@Index) Begin Pri ...

  4. 配置llama实现impala on yarn-验证未通过,仅以此文作为参考

    以下内容采自网络,目前验证未通过,仅以此作为参考: 简介:早期的Impala版本中,为了使用Impala,我们通常会在以Client/Server的结构在各个集群节点启动impala-server.i ...

  5. take a cpu core offline

    [root@vrouter1 ~]# cat /sys/devices/system/cpu/online -,,- [root@vrouter1 ~]# cat /sys/devices/syste ...

  6. Copycat - Overview

    Copycat’s primary role is as a framework for building highly consistent, fault-tolerant replicated s ...

  7. mongo 的简单查询语法

    小白的我对MONGO的一些语句搜集用于区别mysql及一些小常识 pymongo 语法按照id进行倒序操作db.news.find().limit(20).sort([("_id" ...

  8. nginx最基本操作

    1.安装 yum install nginx 2.查看配置位置 nginx -t 3.查看nginx.conf,找到默认html配置路径 vi /etc/nginx/nginx.conf cd /us ...

  9. 【python基础】sys

    sys模块 参考: https://blog.csdn.net/qq_38526635/article/details/81739321 http://www.cnblogs.com/cherishr ...

  10. 如何让html中的td文字只显示部分

    以下笔记有待测试 ———————————————————— <table style="table-layout:fixed"> <tr> <td s ...