MD5加密加盐

Java实现MD5的随机加盐加密,这样以来就很难解密了,必须使用原密码才能正常的登录系统了,以下为Java实现的MD5随机加盐加密,以及使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转:

 1 package com.dq.online.onlinezuul.util;
 2
 3 import org.apache.commons.codec.binary.Hex;
 4
 5 import java.security.MessageDigest;
 6 import java.util.Random;
 7
 8 /**
 9  * @Author Allen.Lv
10  * @Description //TODO
11  * @Date 13:43 2019/4/1
12  * @Desc: Coding Happy!
13  **/
14 public class Md5Utils {
15
16     /**
17      * 加盐MD5加密
18      * <p>
19      *
20      * @Title : getSaltMD5
21      * </p>
22      * <p>
23      * @Description : TODO
24      * </p>
25      */
26     public static String getSaltMD5(String password) {
27         // 生成一个16位的随机数
28         Random random = new Random();
29         StringBuilder sBuilder = new StringBuilder(16);
30         sBuilder.append(random.nextInt(99999999)).append(random.nextInt(99999999));
31         int len = sBuilder.length();
32         if (len < 16) {
33             for (int i = 0; i < 16 - len; i++) {
34                 sBuilder.append("0");
35             }
36         }
37         // 生成最终的加密盐
38         String Salt = sBuilder.toString();
39         password = md5Hex(password + Salt);
40         char[] cs = new char[48];
41         for (int i = 0; i < 48; i += 3) {
42             cs[i] = password.charAt(i / 3 * 2);
43             char c = Salt.charAt(i / 3);
44             cs[i + 1] = c;
45             cs[i + 2] = password.charAt(i / 3 * 2 + 1);
46         }
47         return String.valueOf(cs);
48     }
49
50     /**
51      * 使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转
52      * <p>
53      *
54      * @Title : md5Hex
55      * </p>
56      * <p>
57      * @Description : TODO
58      * </p>
59      */
60 //    @SuppressWarnings("unused")
61     private static String md5Hex(String str) {
62         try {
63             MessageDigest md = MessageDigest.getInstance("MD5");
64             byte[] digest = md.digest(str.getBytes());
65             return new String(new Hex().encode(digest));
66         } catch (Exception e) {
67             e.printStackTrace();
68             System.out.println(e.toString());
69             return "";
70         }
71     }
72
73
74     /**
75      * 验证加盐后密码是否还相同
76      * @param password
77      * @param md5str
78      * @return
79      */
80     public static boolean getSaltverifyMD5(String password, String md5str) {
81         char[] cs1 = new char[32];
82         char[] cs2 = new char[16];
83         for (int i = 0; i < 48; i += 3) {
84             cs1[i / 3 * 2] = md5str.charAt(i);
85             cs1[i / 3 * 2 + 1] = md5str.charAt(i + 2);
86             cs2[i / 3] = md5str.charAt(i + 1);
87         }
88         String Salt = new String(cs2);
89         return md5Hex(password + Salt).equals(String.valueOf(cs1));
90     }
91
92 }

参考文献:

https://blog.csdn.net/Hello_World_QWP/article/details/78913096

原文地址:https://www.cnblogs.com/javallh/p/10635982.html

时间: 2024-12-29 17:40:36

MD5加密加盐的相关文章

Shiro___加密加盐迭代

简单的模拟账号密码登入,为了简便就不去数据库真实的查询了 这里先使用MD5加盐迭代加密,算出我们的密码加密结果 MD5是不可逆的,单向加密,所以我们需要对原始数据进行加密后与加密的数据对比,而不是去解密 package com.test; import org.apache.shiro.crypto.hash.Md5Hash; /** * 对123456加密, * 盐值(salt):zsl * 迭代次数:6 * 加密结果:70fc2a964652cf72d7f67022a7951e51 * @a

php登录加密加盐

1         背景 涉及身份验证的系统都需要存储用户的认证信息,常用的用户认证方式主要为用户名和密码的方式,为了安全起见,用户输入的密码需要保存为密文形式,可采用已公开的不可逆的hash加密算法,比如SHA256, SHA512, SHA3等,对于同一密码,同一加密算法会产生相同的hash值,这样,当用户进行身份验证时,也可对用户输入的明文密码应用相同的hash加密算法,得出一个hash值,然后使用该hash值和之前存储好的密文值进行对照,如果两个值相同,则密码认证成功,否则密码认证失败.

密码加盐

import java.security.MessageDigest;import java.util.Random; import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin; /** * @fileName Md5PasswordUtil.java * @Description 明文密码加密加盐操作 * 1:生成加密密码:首先使用randomSalt获取随机盐值,并保存;再将随机盐值和明文密码传入generate生成加密密文

(转)浅谈MD5加密算法中的加盐值(SALT)

我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法,就是加点“佐料”.其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列.而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确. 这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统

(转,学习记录)MD5加密算法中的加盐值(SALT)

我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法,就是加点“佐料”.其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列.而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确. 这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统

Web应用你加盐了吗?——浅谈MD5加密算法中的加盐值(SALT)

转自:http://blog.csdn.net/blade2001/article/details/6341078 我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法,就是加点“佐料”.其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列.而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后

6.MD5加密

任何数据(也包括软件),经过MD5加密后,会生成一串16字节的字符串,中华人民一般称其为"MD5值". MD5在论坛上.软件发布时经常用,是为了保证文件的正确性,防止一些人盗用程序,加些木马或者篡改版权,设计的一套验证系统.每个文件都可以用MD5验证程序算出一个固定的MD5码来.软件作者往往会事先计算出他的程序的MD5码并帖在网上.因此,在网上看到某个程序下载旁注明了MD5码时,可以把它记下来,下载了这个程序后用MD5验证程序计算你所下载的文件的MD5码,和你之前记下MD5码比较,就知

MD5加密运算

1 //MD5 对字符串的加密 2 -(void)demo1 { 3 NSString *str = @"love"; 4 5 //对字符串进行MD5加密 6 str = str.md5String; 7 8 NSLog(@"str : %@",str); 9 10 //对于比较简单的密码,可以通过一些网站查到,如:http://www.cmd5.com 11 //人为的增加密码的难度,可以对 MD5 进行加盐 12 //用户密码 + 盐值 MD5运算 13 NSS

MD5 加密 以及 加盐加密

这是MD5加密 - (NSString *)MD5Hash { const char *cStr = [self UTF8String]; unsigned char result[16]; CC_MD5(cStr, strlen(cStr), result); NSString * string= [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X"