2016-01-21 32 views
0

我正在從php平臺遷移到Java。我的數據庫充滿了數據加密標準(DES)中存儲密碼的用戶。我通常會這樣做自定義authenticationService:數據加密標準(DES)+ SPRING BOOT認證

@Autowired 
private AuthenticationServiceImpl authenticationService; 

@Override 
protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth.userDetailsService(authenticationService) 
     .passwordEncoder(new BCryptPasswordEncoder()); 
} 

顯然不會使用bCrypt。有什麼建議麼?

+1

請,**永遠不要**存儲用戶密碼,甚至不需要發明最強大的加密功能,因爲它本質上**不安全**。存儲*鹽漬密碼哈希*而不是每個密碼都不同。閱讀此內容以獲得有關此主題的良好概述:https://crackstation.net/hashing-security.htm –

回答

1

你需要編寫自己的使用DES的PasswordEncoder。它不應該是困難的,你可以搜索如何使用DES解密/加密數據(作爲example)。

只是爲了讓你知道,加密密碼是一個非常,非常,非常糟糕的做法(我會建議它的邊界是犯罪),因爲如果你的數據庫和密鑰exfiltrated,攻擊者可以很輕鬆地獲得訪問純文本密碼並嘗試重新使用其他網站上的登錄詳細信息。

既然你有訪問明文密碼,請考慮將它們轉換爲bcrypt和去除DES加密的密碼(在DB,並希望從任何備份,你可能有)

+0

嗯,我通常只是存儲使用Bcrypt創建的鹽漬散列。 這樣的事情:BCrypt.hashpw(employeeJPA.getEmail(),BCrypt.gensalt())和比我存儲該值的數據庫。我在那裏做錯了什麼? 現在的問題是,我正在升級平臺用PHP編寫的5-8年前的其他人,我有我的。不知道該怎麼做才知道。無論如何,請考慮一下。 –

+0

你說你在用bcrypt做的事情很好,因爲它是一個散列函數,但是DES是一個**加密**函數,所以它可以被顛倒......並且**是一個問題。 – Augusto

+0

好了。所以你的建議是讓所有用戶從db,de-crypt DES到字符串,然後用bcrypt進行散列並將散列存儲在db中。希望有一個更簡單的解決方案。我正在開發的這個項目是一個針對本地業務的小型應用程序,他們不太關心安全性,而且我沒有訪問他們的整個代碼,只是db,所以我不能改變他們存儲密碼和驗證用戶日誌的方式即使我想要。無論如何感謝 –