Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将密码保存到derby或sql数据库_Java_Sql_Passwords - Fatal编程技术网

Java 将密码保存到derby或sql数据库

Java 将密码保存到derby或sql数据库,java,sql,passwords,Java,Sql,Passwords,我有一个应用程序,需要我有一个密码终端。我正在使用JPasswordfield(JAVA)。现在我想要的是,我能够将密码以加密形式保存在数据库中,我无法读取,当我检索以进行比较时,两者应该相等,但眼睛无法读取。请告诉我该怎么做,因为目前,我使用jpassword,对其进行转换,并在保存时看到它。当我保存它而不转换时,我无法进行比较,因为值不同。我希望能够比较来自数据库和GUI的密码,而不必在数据库中看到密码。请帮忙 下面是我的代码: package trackme; /**

我有一个应用程序,需要我有一个密码终端。我正在使用
JPassword
field(JAVA)。现在我想要的是,我能够将密码以加密形式保存在数据库中,我无法读取,当我检索以进行比较时,两者应该相等,但眼睛无法读取。请告诉我该怎么做,因为目前,我使用
jpassword
,对其进行转换,并在保存时看到它。当我保存它而不转换时,我无法进行比较,因为值不同。我希望能够比较来自数据库和
GUI
的密码,而不必在数据库中看到密码。请帮忙

下面是我的代码:

 package trackme;

    /**
     *
     * @author kels
     */
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.sql.*;
    import java.util.Arrays;

    /**
     *
     * @author kels
     */
    public class Login  extends JFrame implements ActionListener, ItemListener{

            DBOperator login;
    Statement stat;
    ResultSet rs;
    Connection con;

    String comparestring="Registration";  int getint=4;
     java.sql.Time t = new java.sql.Time(new java.util.Date().getTime());
               java.sql.Date dt = new java.sql.Date(new java.util.Date().getTime());
       private String dbtxt = null, getpassword, username=null, gettype=null;
    //private String gettype="";
         //name components
        JLabel lbllogin = new JLabel("Password: ");
        final    JCheckBox cbshow = new JCheckBox("Show Password");
        JPasswordField txtlogin = new JPasswordField(10);

        JLabel lblusername = new JLabel("UserName:");
        JTextField txtusername = new JTextField(10);


          JButton btnlogin = new JButton("Login");
          JLabel label = new JLabel("");

          //create containers
          JPanel loginpanel = new JPanel();
          JPanel wrappanel = new JPanel();
          JPanel finalpanel = new JPanel();
          JPanel btnpanel=new JPanel();
          JPanel showpanel = new JPanel();
            JPanel usernamepanel = new JPanel();

        @SuppressWarnings("LeakingThisInConstructor")
          public Login(){
              super("Login");
              setResizable(false);

              setLocation(250, 260);
              setSize(250,170);
              Container pane = getContentPane();

              //set Layout Managers
             GridLayout grid = new GridLayout(4,1);
              BorderLayout bord = new BorderLayout();

              //set the managers to the panels
            wrappanel.setLayout(grid);
              pane.setLayout(bord);

              //add components
              usernamepanel.add(lblusername);
              usernamepanel.add(txtusername);
              loginpanel.add(lbllogin);
              loginpanel.add(txtlogin);
              wrappanel.add(usernamepanel);
            wrappanel.add(loginpanel);
               finalpanel.add(wrappanel);
               wrappanel.add(showpanel);
                showpanel.add(cbshow);
               btnpanel.add(btnlogin);
               wrappanel.add(label);
               pane.add(btnpanel, BorderLayout.SOUTH);
               pane.add(finalpanel, BorderLayout.CENTER);

               setContentPane(pane);
               setVisible(true);
              btnlogin.addActionListener(this);
              cbshow.addItemListener(this);

                txtlogin.setEchoChar('*');
          }

        @Override
          public void actionPerformed(ActionEvent ae){
              Object source = ae.getSource();
               login = new DBOperator();
            stat = login.getStatement();
            // PreparedStatement preparedStatement;
             String status = ""; String getstatus="Loggedout"; String getusername=""; String gettypedb="";
            try{
            if(source == btnlogin){

                java.sql.Time  dbtime = null; java.sql.Date dbdate = null; 
              char [] paswrdtxt, passchar;
           paswrdtxt =txtlogin.getPassword();
            getpassword= String.valueOf(paswrdtxt);

            String getstatustrim="";
               //making sure user in not logged in
              rs=stat.executeQuery("SELECT USERNAMEDB,PASSWORD,TYPE FROM PWORD WHERE PASSWORD="
                      + ""+"'"+getpassword+"'" +" AND USERNAMEDB="+"'"+txtusername.getText()+"'"+"");

               while(rs.next()){
                   username=rs.getString("Usernamedb");
                 dbtxt=rs.getString("Password");
                 gettype=rs.getString("Type");

               }
               rs.close();

                if(getpassword.equals(dbtxt) && txtusername.getText().equals(username)){

                    /*do insert to logindb here and check status first to know if logged in or out
                    if loggedin error cause u cant login in while logged in and u can logout when not logged in
                    */
                            rs = stat.executeQuery("SELECT STATUS FROM LOGINDB WHERE  LOGINDATE="+"'"+dt+"'" 
                                    +" AND USERNAME="+"'"+txtusername.getText()+"'"+"");
              while(rs.next()){

                status=rs.getString("Status");

               }
               rs.close();
              }//end if comparison            
            }//end btnlogin

             stat.close();
          }//end try
          catch(SQLException ex){
              System.out.println(ex.toString() + "no deal");
          }

          }
        public static void main(String[] args){
            Login lm = new Login();      

        }
    }

提前谢谢

我终于得到了我问题的答案。 经过大量研究后,我使用Java crypto API将其整合在一起。 感谢上帝给了我这个和你的建议@cricket_007 下面是我需要的代码片段:

import java.security.Key;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;


 private static final String ALGORITHM = "AES";
private static final String KEY = "1Hbfh667adfDEJ78";

 String encryptedPassword = null;  String encryptname = null;
              try {
                  encryptedPassword = encrypt(getpassword);
                  encryptname = encrypt(ppword);
              } catch (Exception ex) {
                  Logger.getLogger(Tester.class.getName()).log(Level.SEVERE, null, ex);
              }

public  String encrypt(String value) throws Exception
{
Key key = generateKey();
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte [] encryptedByteValue = cipher.doFinal(value.getBytes("utf-8"));
String encryptedValue64 = new BASE64Encoder().encode(encryptedByteValue);
return encryptedValue64;
}

private  Key generateKey() throws Exception
{
Key key = new SecretKeySpec(KEY.getBytes(),ALGORITHM);
return key;
}

谢谢

我不确定JPassword与这个问题有什么关系,但是任何关于“如何安全地存储密码”的教程都应该告诉你需要什么相关的:那里也有很多代码-你能把它简化到我们更好理解所需的最低限度吗?