【发布时间】:2014-11-07 11:54:08
【问题描述】:
我在 CBC 模式下使用 128 位 AES 加密和 PKCS #5 填充来将密码保存到我的数据库。 但是,当我尝试登录时,即使我使用了正确的密码,系统也会告诉我密码无效。
在我的 UserSetup 类中,这些是我用于加密密码并将其保存到我的数据库的代码:
try {
String input = simple_text.getText();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] iv = new byte[cipher.getBlockSize()];
new SecureRandom().nextBytes(iv);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.update(keyString.getBytes());
byte[] key = new byte[16];
System.arraycopy(digest.digest(), 0, key, 0, key.length);
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
// encrypt
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encrypted = cipher.doFinal(input.getBytes("UTF-8"));
System.out.println("encrypted: " + new String(encrypted));
encrypt_text .setText(new String(encrypted));
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, e2);
}
try {
String sql = "INSERT INTO user(username,password) VALUES(?,?) ON DUPLICATE KEY UPDATE username=VALUES(username),password=VALUES(password)";
pst=conn.prepareStatement(sql);
pst.setString(1, fLoginName.getText());
pst.setString(2, encrypt_text.getText());
pst.execute();
JOptionPane.showMessageDialog(null, "saved");
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, e2);
}
在我的登录类中,我有以下代码:
String sql ="select * from user where username=? and password=?";
if(loginNameField.getText().equals("me") && passwordField.getText().equals("me")){
frmLoginWindow.dispose();
new GridMain().setVisible(true);
}else{
try{
pst=conn.prepareStatement(sql);
pst.setString(1,loginNameField.getText());
pst.setString(2,passwordField.getText());
rs=pst.executeQuery();
if(rs.next()){
//JOptionPane.showMessageDialog(null, "Username and Password is correct ");
rs.close();
pst.close();
// close();
frmLoginWindow.dispose();
new GridMain().setVisible(true);
}
else{
JOptionPane.showMessageDialog(null, "Username and Password is not correct");
}
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null, e);
} finally {
try{
rs.close();
pst.close();
}
catch(Exception e) {}
}
}
我的加密密码已成功保存,但我需要一种方法将我的登录密码与加密密码匹配,因为即使您加密相同的密码,AES 加密也不会给出相同的加密值。
【问题讨论】:
标签: java security encryption