MD5撒盐加密 主要可以做字符串验证--最合适的是登录密码验证操作

import java.security.MessageDigest;
import java.util.Random;public class MD5Util {/*** 加盐MD5** @param password* @return* @author daniel* @time 2016-6-11 下午8:45:04*/public static String generateMD5(String password) {Random r = new Random();StringBuilder sb = new StringBuilder(16);sb.append(r.nextInt(99999999)).append(r.nextInt(99999999));int len = sb.length();if (len < 16) {for (int i = 0; i < 16 - len; i++) {sb.append("0");}}String salt = sb.toString();password = md5Hex(password + salt);char[] cs = new char[48];for (int i = 0; i < 48; i += 3) {cs[i] = password.charAt(i / 3 * 2);char c = salt.charAt(i / 3);cs[i + 1] = c;cs[i + 2] = password.charAt(i / 3 * 2 + 1);}return new String(cs);}/*** 校验加盐后是否和原文一致** @param str* @param md5* @return* @author daniel* @time 2016-6-11 下午8:45:39*/public static boolean verify(String str, String md5) {char[] cs1 = new char[32];char[] cs2 = new char[16];for (int i = 0; i < 48; i += 3) {cs1[i / 3 * 2] = md5.charAt(i);cs1[i / 3 * 2 + 1] = md5.charAt(i + 2);cs2[i / 3] = md5.charAt(i + 1);}String salt = new String(cs2);return md5Hex(str + salt).equals(new String(cs1));}/*** 获取十六进制字符串形式的MD5摘要*/private static String md5Hex(String src) {try {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] bs = md5.digest(src.getBytes());return new String(hexEncode(bs));} catch (Exception e) {return null;}}/*** 字节流转成十六进制表示*/public static String hexEncode(byte[] src) {String strHex;StringBuilder sb = new StringBuilder();for (int n = 0; n < src.length; n++) {strHex = Integer.toHexString(src[n] & 0xFF);sb.append((strHex.length() == 1) ? "0" + strHex : strHex); // 每个字节由两个字符表示,位数不够,高位补0}return sb.toString().trim();}// 测试主函数public static void main(String args[]) {// 原文String passwordStr = "password22";// 获取加盐后的MD5值String md5Value = MD5Util.generateMD5(passwordStr);System.out.println("加盐后MD5:" + md5Value);System.out.println("是否是同一字符串:" + MD5Util.verify(passwordStr,md5Value));System.out.println("-----------------------------------------------------------");//加盐后每次生成的MD5值String[] strMd5s = new String[]{"98641096ee18e91476d93a9de23915862536715a9740e702","554c50735a9c149b0a556a5d89302d794b4242c44257dd99","69aa44d7f53f345e6ec5ef8eb6923eb3083890591a701b0d","36c28d591946a4928bc16878c9d29e20ba02b7bd5f80243f"};for (String strMd5:strMd5s){System.out.println("是否是同一字符串:" + MD5Util.verify(passwordStr, strMd5));}}}

运行结果:

加盐后MD5:09a233f6b90d583641b5531983e310394a49896d0564f367
是否是同一字符串:true
-----------------------------------------------------------
是否是同一字符串:false
是否是同一字符串:false
是否是同一字符串:true
是否是同一字符串:false

安全编程之MD5撒盐加密相关推荐

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

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

  2. 密码MD5加盐加密----注册、校验、修改模块

    思路:     单纯的MD5加密容易被碰撞破解,考虑将密码加上一个随机字符串(盐),再一同进行MD5加密,提高安全性. 此时,盐相当于另一半秘钥,需将盐一同存入数据库,用以验证. 实现过程:      ...

  3. MD5加盐加密工具类(可直接使用)

    MD5加盐加密工具类 在我们做项目时,涉及到用户密码,而正常来说数据库中不会直接存储明文的密码,都是加密之后的密码. 密码加密的方式有很多,比如: ① 3DES.AES.DES:使用对称加密算法,可以 ...

  4. java md5加盐与解密_md5加密,md5加盐加密和解密

    packagecom.java.test;importjava.security.MessageDigest;importjava.security.SecureRandom;importjava.u ...

  5. JAVA实现MD5带盐加密_MD5加盐加密

    标签: package com.chauvet.utils; import java.security.NoSuchAlgorithmException; import java.util.Rando ...

  6. MD5加盐加密工具类

    直接使用MD5加密,能被解密网站破解,因此在加密的时候可以加个盐值.工具类如下: import org.apache.commons.codec.binary.Base64; import java. ...

  7. Python编程之md5加密和sha1加密

    Python编程之消息加密 在python中进行消息的加密,下面是md5加密方法和sha1加密方法: import hashlibdef my_md5(value):m = hashlib.md5() ...

  8. ios MD5加盐加密

    MD5加密 是HASH算法一种. 是生成32位的数字字母混合码. MD5主要特点是 不可逆 MD5算法还具有以下性质: 1.压缩性:任意长度的数据,算出的MD5值长度都是固定的.2.容易计算:从原数据 ...

  9. SpringBooot MD5加盐加密

    String pwd = userInfo.getPassword();//随机生成密码盐(字符)String str = "abcdefghijklmnopqrstuvwxyzABCDEF ...

最新文章

  1. 主题模型(topic models)解释及评估
  2. 4种实例 advice aop_Java动态代理在Spring的应用:AOP编程与动态代理知识
  3. OpenCV视频中的人脸标志检测
  4. mac下日期、时间戳互转
  5. 存储类型auto,static,extern,register的区别 转
  6. 【转载】规则化和模型选择(Regularization and model selection)
  7. 【Python】【有趣的模块】【systimeos】
  8. No goals have been specified for this build. You must specify a valid lifecycle phase or a goal.....
  9. 工作流框架的设计要点
  10. speedoffice(word)如何批量让字体大一号
  11. 数学分析讲义习题解答:(二)
  12. 数学建模 —— 评价模型
  13. spring框架学习总结(非xml方式注册bean)
  14. mysql课设体会_课程设计心得体会8篇
  15. 九峰影业创始人_《勇士之城》林永健扮演棠德县县长魏九峰
  16. 检查两个单词是否为变位词(Anagram)
  17. 江苏辖区农商银行2020年(科技类)
  18. 从我的角度体会平安车险的服务
  19. VS2017+MFC+sqlite数据库操作
  20. 计算机网络入门之TCP/IP模型

热门文章

  1. 小程序适配IphoneX
  2. 性能测试常见指标有哪些
  3. 《老喻的人生算法课》之A计划笔记(一)
  4. iOS 推送系统方法总结
  5. 机器学习 高斯混合模型
  6. python 将MNIST数据集转为jpg图片格式
  7. PosgreSQL函数验证身份证
  8. Linux系统安装Nginx教程
  9. Airbnb爱彼迎推出看得见“春色”的房源
  10. 以太坊的下一站:“上海”升级