MD5带盐值的java加密算法

 
  1. import java.security.MessageDigest;
  2.  
  3. public class PasswordEncoder {
  4.  
  5. private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
  6. "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
  7.  
  8. private Object salt;
  9. private String algorithm;
  10.  
  11. public PasswordEncoder(Object salt, String algorithm) {
  12. this.salt = salt;
  13. this.algorithm = algorithm;
  14. }
  15.  
  16. public String encode(String rawPass) {
  17. String result = null;
  18. try {
  19. MessageDigest md = MessageDigest.getInstance(algorithm);
  20. //加密后的字符串
  21. result = byteArrayToHexString(md.digest(mergePasswordAndSalt(rawPass).getBytes("utf-8")));
  22. } catch (Exception ex) {
  23. }
  24. return result;
  25. }
  26.  
  27. public boolean isPasswordValid(String encPass, String rawPass) {
  28. String pass1 = "" + encPass;
  29. String pass2 = encode(rawPass);
  30.  
  31. return pass1.equals(pass2);
  32. }
  33.  
  34. private String mergePasswordAndSalt(String password) {
  35. if (password == null) {
  36. password = "";
  37. }
  38.  
  39. if ((salt == null) || "".equals(salt)) {
  40. return password;
  41. } else {
  42. return password + "{" + salt.toString() + "}";
  43. }
  44. }
  45.  
  46. /**
  47. * 转换字节数组为16进制字串
  48. * @param b 字节数组
  49. * @return 16进制字串
  50. */
  51. private static String byteArrayToHexString(byte[] b) {
  52. StringBuffer resultSb = new StringBuffer();
  53. for (int i = 0; i < b.length; i++) {
  54. resultSb.append(byteToHexString(b[i]));
  55. }
  56. return resultSb.toString();
  57. }
  58.  
  59. private static String byteToHexString(byte b) {
  60. int n = b;
  61. if (n < 0)
  62. n = 256 + n;
  63. int d1 = n / 16;
  64. int d2 = n % 16;
  65. return hexDigits[d1] + hexDigits[d2];
  66. }
  67.  
  68. public static void main(String[] args) {
  69. String salt = "helloworld";
  70. PasswordEncoder encoderMd5 = new PasswordEncoder(salt, "MD5");
  71. String encode = encoderMd5.encode("test");
  72. System.out.println(encode);
  73. boolean passwordValid = encoderMd5.isPasswordValid("1bd98ed329aebc7b2f89424b5a38926e", "test");
  74. System.out.println(passwordValid);
  75.  
  76. PasswordEncoder encoderSha = new PasswordEncoder(salt, "SHA");
  77. String pass2 = encoderSha.encode("test");
  78. System.out.println(pass2);
  79. boolean passwordValid2 = encoderSha.isPasswordValid("1bd98ed329aebc7b2f89424b5a38926e", "test");
  80. System.out.println(passwordValid2);
  81. }
  82.  
  83. }

转自:http://www.cnblogs.com/yinww/archive/2009/12/02/1615542.html

MD5加盐 Java加密算法的更多相关文章

  1. Java使用MD5加盐进行加密

    Java使用MD5加盐进行加密    我使用的方法是导入了md5.jar包,就不需要再自己写MD5的加密算法了,直接调用方法即可 点击下载md5包 import com.ndktools.javamd ...

  2. md5加密,md5加盐加密和解密

    package com.java.test; import java.security.MessageDigest; import java.security.SecureRandom; import ...

  3. MD5 加盐(Java)

    本文转载自:https://blog.csdn.net/dingsai88/article/details/51637977 jar:https://pan.baidu.com/s/1-8JaRoUt ...

  4. MD5 加盐加密

    一.概述 MD5(Message Digest  Algorithm 5),是一种散列算法,是不可逆的,即通过md5加密之后没办法得到原文,没有解密算法. 在一般的项目中都会有登录注册功能,最简单的, ...

  5. 一种简单的md5加盐加密的方法(防止彩虹表撞库)

    md5加密(或者说摘要算法)大家都很熟悉了 就不解释了 现在很多数据库设计都喜欢用单向加密的方式保存密码,验证时对提交的密码再次加密之后做密文对比 /// <summary> 使用MD5加 ...

  6. MD5加盐加密

    package com.chauvet.utils; import java.security.NoSuchAlgorithmException; import java.util.Random; / ...

  7. 用户角色权限查询添加bug集锦 用户密码加密 MD5 加盐 随机盐 spring的加密bcrypt

    package cn.itcast.encode; import org.apache.commons.lang3.RandomStringUtils; import org.springframew ...

  8. MD5加盐,实现一人一密

    理论上md5是不可逆的,而且MD5本来也不是作加密使用,而是用来校验数据的完整性,只是因为其不可逆且稳定.快速的特点,被广泛用于对明文密码的加密. 至今仍然后很多开发人员相信MD5的保密性,也许因为他 ...

  9. MD5加盐与安全

    PHP开发者对md5()这个函数是熟悉不过了,很多开发者都使用md5('abc123')对用户密码进行加密处理,这样做没有错,但是安全性还是很低的,因为很多网站的用户数据都是用md5进行加密处理的,所 ...

随机推荐

  1. python 发包爬取中国移动充值页面---可判断手机号是否异常

    1.用requests.Session()的方式,可以实现自动化管理cookie.session等. 2.具体流程可以抓包分析. 所有请求的参数如要搞清楚需要分析js源码.只能提示一下,一共分为三步: ...

  2. React复习小结(一)

    一.React的发展 facebook在构建instagram网站的时候遇见两个问题: 1.数据绑定的时候,大量操作真实dom,性能成本太高 2.网站的数据流向太混乱,不好控制 于是facebook起 ...

  3. 【web前端开发】浏览器兼容性处理

    1.居中问题div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto;2.高度问题两上下排列或嵌套的div,上面的div设置高度(height),如果div里的 ...

  4. 使用DotNetty编写跨平台网络通信程序

    长久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架.终于微软的Azure团队,使用C#实现的Netty的版本发布.不但使用了C#和.Net平台的技术特点, ...

  5. Discuz插件开发之全站论坛目录结构注释

    基本上新版本的discuzX系列目录结构都差不多,刚好大神整理出来了,就拿来看吧. |-- /api        uc.php   UCenter通信文件        |-- /api/addon ...

  6. Sql Server 事物

    事物的定义: 数据库的事物是原子性的,原子性的概念是指把一些事情当做一个单元来看待. 从数据库的角度看,它是指全部执行或者全部不执行的一条或者多条语句的最小组合:为了理解事务的概念,需要能够定义非常明 ...

  7. SQLServer 理解copyonly备份操作

    标签:MSSQL/日志截断 概述 Alwayson在添加数据库的过程中如果同步首选项选择的是“完整”,那么就会在主副本上执行copyonly的完整备份和日志备份在辅助副本上执行还原操作,也正是这个操作 ...

  8. JavaScript事件与例子

    事件,就是预先设置好的一段代码,等到用户触发的时候执行. 一:常见的事件: 1.关于鼠标的事件 onclick 鼠标单击触发 ondblclick 鼠标双击触发 onmouseover 鼠标移上触发 ...

  9. JAVAEE——spring01:介绍、搭建、概念、配置详解、属性注入和应用到项目

    一.spring介绍 1.三层架构中spring位置 2.spring一站式框架 正是因为spring框架性质是属于容器性质的. 容器中装什么对象就有什么功能.所以可以一站式. 不仅不排斥其他框架,还 ...

  10. JS 事件派发器EventDispatcher

    在Java和AS中经常用到EventDispatcher,写了一个JS版本的. addListener :添加事件监听器 removeListener:移除事件监听器 dispatchEvent:派发 ...