Я разрабатываю простое приложение, которое должно принимать имя пользователя и пароль, данные сохраняются в файле CSV.
Я хочу, чтобы эти данные были зашифрованы, чтобы никто не мог просто открыть и прочитать их. имена пользователей и пароли, перечисленные там, я покопался в Интернете и нашел хороший метод, который отлично работает для моего приложения, за исключением того, что он создает новый файл с зашифрованными данными, а исходный файл все еще существует.
I попытался изменить код, чтобы сохранить зашифрованный файл поверх исходного, но он дает мне простой файл, и, конечно, все данные потеряны.
это мой код
public static void encryptDecrypt (String key, int cipherMode, File in, File out)
throws InvalidKeyException, NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IOException
{
FileInputStream fileInputStream = new FileInputStream(in);
FileOutputStream fileOutputStream = new FileOutputStream(out);
DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
if(cipherMode == Cipher.ENCRYPT_MODE) {
cipher.init(Cipher.ENCRYPT_MODE, secretKey, SecureRandom.getInstance("SHA1PRNG"));
CipherInputStream cipherInputStream = new CipherInputStream(fileInputStream, cipher);
write(cipherInputStream, fileOutputStream);
}
else if (cipherMode == Cipher.DECRYPT_MODE){
cipher.init(Cipher.DECRYPT_MODE, secretKey, SecureRandom.getInstance("SHA1PRNG"));
CipherOutputStream cipherOutputStream = new CipherOutputStream(fileOutputStream, cipher);
write(fileInputStream, cipherOutputStream);
}
}
public static void write(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[64];
int numOfByteRead;
while ((numOfByteRead = in.read(buffer)) != -1){
out.write(buffer, 0, numOfByteRead);
}
out.close();
in.close();
}
и кнопка закрытия в приложении должна зашифровать файл, содержащий список имен пользователей и паролей, поэтому я сделал следующее
public void setCancelButton(){
File login = new File("D:\\Users\\login.csv");
File encrypted = new File("D:\\Users\\login.csv");
try {
encryptDecrypt("12345678", Cipher.ENCRYPT_MODE, login, encrypted);
System.out.println("File Encrypted");
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
}
Stage stage = (Stage) cancelButton.getScene().getWindow();
stage.close();
}
в результате получается файл с зашифрованной только одной ячейкой, и при попытке обратить вспять процесс расшифровки того же файла, который он создает, и пустой файл.