我正在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