登錄之密碼加密

一、密碼加密的原因

如果用戶輸入了密碼,後臺不做任何處理的話,那麼該用戶的明文密碼就會在網絡上進行傳輸,假如說有惡意的用戶把你的密碼給截取到了,那麼他(她)就會得到你的明文密碼。

二、可以對密碼進行兩次MD5

第一次,對密碼進行MD5加密,然後再把MD5加密之後的密碼傳遞給服務端;(防止密碼明文傳輸)

第二次,服務端在接收到客戶端傳過來的MD5加密密碼,並不是直接把它寫入到數據庫中,而是隨機生成一個salt,根用戶輸入的密碼進行一次拼裝,然後再做一次MD5,然後把MD5和salt同時寫道數據庫當中(這樣操作更安全)

三、引入MD5工具類,添加MD5Util

1、添加MD5相關依賴

                <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>

2、創建MD5Util類

package demo.utils;

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";      // 默認的salt值

	//將form表單輸入的密碼轉化爲md5加密密碼
	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);  // 123456----->12123456c3
		return md5(str);  // md5加密
	}

	//將md5加密的密碼轉化爲數據庫密碼
	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;
	}
	
	
	
}

3、測試

        public static void main(String[] args) {
//		System.out.println(inputPassToFormPass("123456")); //d3b1294a61a07da9b49b6e22b2cbd7f9
		System.out.println(formPassToDBPass(inputPassToFormPass("123456"), "1a2b3c4d")); //b7797cce01b4b131b433b6acf4add449

	}

分析:明文密碼由123456通過一次MD5加密變爲了d3b1294a61a07da9b49b6e22b2cbd7f9,d3b1294a61a07da9b49b6e22b2cbd7f9和1a2b3c4d進行拼裝又進行了一次MD5加密變爲了b7797cce01b4b131b433b6acf4add449,所以最終存入到數據庫的是b7797cce01b4b131b433b6acf4add449

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章