1、數(shù)據(jù)庫設(shè)計(jì)

2、明文密碼兩次MD5處理
http在網(wǎng)絡(luò)中是通過明文來進(jìn)行傳輸?shù)?,如果用戶登陸時(shí)輸入的用戶名和密碼不做處理。那么如果數(shù)據(jù)包對別人截取到了,就能過得到數(shù)據(jù)包中的明文密碼。
兩次MD5:
第一次加密: 將用戶輸入的明文密碼加上固定Salt 之后進(jìn)行MD5加密,然后在網(wǎng)絡(luò)中進(jìn)行傳輸。當(dāng)傳輸?shù)竭_(dá)服務(wù)器端的時(shí)候,進(jìn)行第二次加密。
用戶端: PASS = MD5(明文 + 固定Salt)
第二次加密:第一次加密后的密文和一個(gè)隨機(jī)Salt結(jié)合之后,再進(jìn)行一次MD5加密(這是為了防止數(shù)據(jù)庫被盜,如果只進(jìn)行一次MD5加密的話,可以通過反查表的方式推算出明文密碼)。
服務(wù)端: PASS = MD5(用戶輸入 + 隨機(jī)Salt)
首先,需要在pom.xml中引入MD5相關(guān)的依賴:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
然后,新建包 com...util,在這個(gè)包下面新建類 MD5Util.java:
package com.*.*.util;
import org.apache.commons.codec.digest.DigestUtils;
public class MD5Util {
public static String md5(String src) {
return DigestUtils.md5Hex(src);
}
private static final String salt = "1a2b3c4d";
public static String inputPassToFormPass(String inputPass) {
String str = ""+salt.charAt(0)+salt.charAt(2) + inputPass +salt.charAt(5) + salt.charAt(4);
System.out.println(str);
return md5(str);
}
public static String formPassToDBPass(String formPass, String salt) {
String str = ""+salt.charAt(0)+salt.charAt(2) + formPass +salt.charAt(5) + salt.charAt(4);
return md5(str);
}
public static String inputPassToDbPass(String inputPass, String saltDB) {
String formPass = inputPassToFormPass(inputPass);
String dbPass = formPassToDBPass(formPass, saltDB);
return dbPass;
}
public static void main(String[] args) {
System.out.println(inputPassToFormPass("123456"));//d3b1294a61a07da9b49b6e22b2cbd7f9
// System.out.println(formPassToDBPass(inputPassToFormPass("123456"), "1a2b3c4d"));
// System.out.println(inputPassToDbPass("123456", "1a2b3c4d"));//b7797cce01b4b131b433b6acf4add449
}
}