JAVA代码MD5加密方法
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加密方法的更多相关文章
- java中md5加密方法
package com.func; import java.io.UnsupportedEncodingException;import java.math.BigInteger;import jav ...
- Java生成MD5加密字符串代码实例
这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ...
- Java实现MD5加密及解密的代码实例分享
链接:http://www.jb51.net/article/86027.htm Java实现MD5加密及解密的代码实例分享 作者:厦门大学陈黎栋 字体:[增加 减小] 类型:转载 时间:2016-0 ...
- 使用JAVA进行MD5加密后所遇到的一些问题
前言:这几天在研究apache shiro如何使用,这好用到了给密码加密的地方,就碰巧研究了下java的MD5加密是如何实现的,下面记录下我遇到的一些小问题. 使用java进行MD5加密非常的简单,代 ...
- Java实现MD5加密_字符串加密_文件加密
Java实现MD5加密,具体代码如下: package com.bstek.tools; import java.io.FileInputStream; import java.io.IOExcept ...
- java 实现md5加密的三种方式与解密
java 实现md5加密的三种方式 CreateTime--2018年5月31日15点04分 Author:Marydon 一.解密 说明:截止文章发布,Java没有实现解密,但是已有网站可以免费 ...
- Java C# MD5 加密串一致性
Java C# MD5 加密串一致性 Java public final static String md5(String s) { char hexDigits[] = { '0', '1', ...
- .net系统的MD5加密方法
/// <summary>/// .net系统的MD5加密方法/// </summary>/// <param name="strIN">< ...
- python文件的md5加密方法
本文实例讲述了python文件的md5加密方法.分享给大家供大家参考,具体如下: 一.简单模式: from hashlib import md5 def md5_file(name): m = md5 ...
随机推荐
- ubuntu部署php7.1
先更新本机内置的程序. sudo apt-get updatesudo apt-get upgrade 安装PHP sudo add-apt-repository ppa:ondrej/php sud ...
- Django----Admin流程
Admin执行步骤 启动文件: 1:创建app-----stark 2:在每个app中创建stark 3:django----admin---- 4:在stark中写入:--------------- ...
- db2 reorg(转)
DB2 reorg RUNSTATS: db2 connect to rmdb11 user rmadmin using rmadmin 对所有用户表执行runstats(reorgchk加updat ...
- TOP100summit【分享实录-网易】构建云直播分发网络
本篇文章内容来自2016年TOP100summit网易视频云.网易杭州研究院服务端技术专家邵峰的案例分享.编辑:Cynthia 邵峰:网易视频云.网易杭州研究院服务端技术专家浙江大学计算机专业博士毕业 ...
- 终于知道什么情况下需要实现.NET Core中的IOptions接口
自从接触 IOptions 之后,一直纠结这样的问题:自己定义的 Options 要不要实现 IOptions 接口. 微软有的项目中实现了,比如 Caching 中的 MemoryCacheOpti ...
- jdbc ---- DBUTilDao 类
1, 列用工具包 阿里的 DbUtils: JDBC Utility Component Examples 再次封装成通用的 update, query package com.ljs.dao; i ...
- [skill][makefile] makefile 常用内容记录
其实,makefile有点复杂. 文档看了又看,还是要经常翻,做个记录备忘 :) 1. 隐含命令 implicit rules 与 implicit rule 相对应的有 pattern rules ...
- MiniHook研究
git hub 地址: https://github.com/RaMMicHaeL/minhook
- MVVM软件设计模式(转)
add by zhj: MVVM是一种软件设计模式,这里要说一下设计模式,我们通常所的设计模式是指面向对象中的设计模式,用在面向对象编程语言中.但软件设计模式是更高一个级别的设计模式,两者不是同一个东 ...
- sqlite数据导入mysql
sqlite导出数据 1.首先将sqlite数据库中的数据库格式由db或者db3等转为.sql格式,方法如下: 首先是不修改路径的情况下,在命令行下(方法一): sqlite3 database_na ...