我正在Netbeans上使用MySQL和Java持久性API開發Web應用程序。該應用程序需要用戶創建一個帳戶才能使用,我試圖在存入數據庫之前加密密碼。問題是,在我的SQL腳本中,我設置了存儲密碼的用戶帳戶表,其大小限制爲256,並自動生成JPA實體類。如果我正常存儲密碼,這不會產生問題,但每當我嘗試加密密碼時都會出現問題。這是我本來有:Java將加密字符串存儲到MySQL數據庫
import org.netbeans.lib.uihandler.PasswdEncryption;
public void encryptPassword(String password)
{
String encryptedPassword = PasswdEncryption.encrypt(password);
storeIntoDatabase(password);
}
但是,每當我試圖創建一個新帳戶,我收到這是由javax.ConstraintViolationException
引起EJBExcepton
。
我發現PasswdEncryption.encrypt
創建了一個大於256的字符串,我認爲這是導致異常的原因。我第一次嘗試改變我原來的SQL腳本,以提高密碼輸入的大小和運行它,但我仍然得到同樣的問題,因爲實體類約束仍然是256。所以我的問題是
- 有沒有辦法改變約束無需再次自動生成?
- 或者創建一個256或更小的加密字符串?
「我正在嘗試加密密碼」。停在那兒。密碼應該是*散列*,不加密,否則你將失去不可否認性的法律屬性,這就使得它簡直可以讓你的公司破產。不要這樣做。另見[這個問題](http://stackoverflow.com/questions/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext-retrie/2287672#2287672)。 – EJP 2014-10-30 00:31:33