Здесь я добавляю в свою базу пароли и сайты, связанные с ними, думаю, это нормально работает. Я вижу зашифрованный пароль в базе данных, когда я его изучаю:
public static void lisaa(PreparedStatement statement, ResultSet resultSet,
Connection connection, Scanner lukija, Kryptaaja kc)throws SQLException,
Exception {
System.out.println("Sivu salasanalle: ");
String sivu = lukija.nextLine();
System.out.println("Salasana: ");
String ss = lukija.nextLine();
String[] sanabytes = new String[] {ss};
statement = connection.prepareStatement("INSERT INTO PASSWORDS (sivu,
salasana) VALUES(?, ?)");
statement.setString(1, sivu);
statement.setString(2, kc.kryptaa(sanabytes));
statement.executeUpdate();
}
Мой метод, который извлекает зашифрованные пароли из базы данных и пытается их распечатать:
public static void tulosta(PreparedStatement statement, ResultSet resultSet,
Connection connection, Kryptaaja kc)throws SQLException, Exception {
statement = connection.prepareStatement("select * from PASSWORDS");
resultSet = statement.executeQuery();
boolean onko = false;
while (resultSet.next()) {
onko = true;
String sivu = resultSet.getString("sivu");
String ss = resultSet.getString("salasana");
String[] sanabytes = new String[]{ss};
String dekryptattu = kc.tulkkaa(sanabytes);
System.out.println(sivu + ": " + dekryptattu );
}
if (!onko) {
System.out.println("ei kappaleita!");
}
}
Мой класс, который шифрует и расшифровывает пароль. Игнорируйте комментарии, это только для тестирования, они здесь, чтобы пояснить мне, что делает код (не мой):
public Kryptaaja(){
}
Шифруя пароль, я думаю, что это работает:
public String kryptaa (String[] args) throws Exception {
//
// Check args and get plaintext
if (args.length !=1) {
System.err.println("Usage: java PrivateExample text");
System.exit(1);
}
byte[] plainText = args[0].getBytes("UTF8");
//
// Get a DES private key
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
// If you do not initialize the KeyGenerator, each provider supply a default initialization.
keyGen.init(56);
Key key = keyGen.generateKey();
//
// Creates the DES Cipher object (specifying the algorithm, mode, and padding).
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
// Print the provider information
//
// Initializes the Cipher object.
cipher.init(Cipher.ENCRYPT_MODE, key);
// Encrypt the plaintext using the public key
byte[] cipherText = cipher.doFinal(plainText);
String kryptattu = Base64.getEncoder().encodeToString(cipherText);
String erikryptattu = ( new String(cipherText, "UTF8") );
return kryptattu;
}
Способ расшифровки пароля, думаю проблема моя кроется вот в этом:
public String tulkkaa (String[] args) throws Exception {
//
// Check args and get plaintext
if (args.length !=1) {
System.err.println("Usage: java PrivateExample text");
System.exit(1);
}
byte[] krypted = args[0].getBytes("UTF8");
//
// Get a DES private key
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
// If you do not initialize the KeyGenerator, each provider supply a default initialization.
keyGen.init(56);
Key key = keyGen.generateKey();
//
// Creates the DES Cipher object (specifying the algorithm, mode, and padding).
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
// Initializes the Cipher object.
cipher.init(Cipher.DECRYPT_MODE, key);
// Decrypt the ciphertext using the same key
byte[] newPlainText = cipher.doFinal(krypted);
Здесь я кодирую байты -> Строка:
String sana = Base64.getEncoder().encodeToString(newPlainText);
String eri =( new String(newPlainText, "UTF8") );
return sana;
}
}