шифровать и дешифровать значение файла свойств в Java

Я ищу способ зашифровать пароль в файле конфигурации, который читается программой Java. В настоящее время я зачитываю пароль из текстового файла, но он оставляет пароль открытым, если кто-то просматривает файл конфигурации.

Я думал о создании простого класса, в котором пользователь мог бы ввести желаемый пароль, получить зашифрованную версию пароля, а затем вставить зашифрованную версию в текстовый файл конфигурации. Затем приложение считывает зашифрованный пароль, расшифровывает пароль обратно в строку и продолжает работу.

У меня проблемы со строкой -> зашифрованные байты -> преобразования строк.

Я использую встроенные классы безопасности Java для реализации этого кода. Вот пример тестового кода:

    // Reads password from config file
String password = ScriptConfig.getString( "password" );

// Generate Key
KeyGenerator kg = KeyGenerator.getInstance("DES");
Key key = kg.generateKey();

// Create Encryption cipher
Cipher cipher = Cipher.getInstance( "DES" );
cipher.init( Cipher.ENCRYPT_MODE, key );

// Encrypt password
byte[] encrypted = cipher.doFinal( password.getBytes() );

// Create decryption cipher
cipher.init( Cipher.DECRYPT_MODE, key );
byte[] decrypted = cipher.doFinal( encrypted );

// Convert byte[] to String
String decryptedString = new String(decrypted);

System.out.println("password: " + password);
System.out.println("encrypted: " + encrypted);
System.out.println("decrypted: " + decryptedString);

// Read encrypted string from config file
String encryptedPassword = ScriptConfig.getString( "encryptedPassword"
);

// Convert encryptedPassword string into byte[]
byte[] encryptedPasswordBytes = new byte[1024];
encryptedPasswordBytes = encryptedPassword.getBytes();

// Decrypt encrypted password from config file
byte[] decryptedPassword = cipher.doFinal( encryptedPasswordBytes );//error here

System.out.println("encryptedPassword: " + encryptedPassword);
System.out.println("decryptedPassword: " + decryptedPassword);


The config file has the following variables:
password=password
encryptedPassword=[B@2a4983


When I run the code, I get the following output:
password: passwd
encrypted: [B@2a4983
decrypted: passwd
javax.crypto.IllegalBlockSizeException: Input length must be multiple
of 8 when decrypting with padded cipher
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.DESCipher.engineDoFinal(Da shoA12275)
at javax.crypto.Cipher.doFinal(DashoA12275)
at com.sapient.fbi.uid.TestEncryption.main(TestEncryp tion.java:4

Любая помощь в отношении ошибки, структуры или процесса, который я использую для этого, была бы полезной. Благодарю.

Ответы на вопрос(4)

Ваш ответ на вопрос