criptografar e descriptografar o valor do arquivo de propriedades em java

Estou procurando uma maneira de criptografar uma senha em um arquivo de configuração que está sendo lido por um programa Java. Atualmente, leio a senha do arquivo de texto, mas isso deixa a senha aberta, se alguém olhar para o arquivo de configuração.

Eu estava pensando em criar uma classe simples em que o usuário pudesse digitar a senha desejada, obter uma versão criptografada da senha e colar a versão criptografada no arquivo de texto de configuração. Em seguida, o aplicativo lia a senha criptografada, descriptografava a senha novamente em uma sequência e seguia em frente.

Estou tendo problemas com a string -> bytes criptografados -> conversões de string.

Estou usando as classes de segurança java internas para implementar esse código. Aqui está um código de teste de amostra:

    // 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

Qualquer ajuda sobre o erro, estrutura ou processo que estou usando para fazer isso seria ótimo. Obrigado.

questionAnswers(4)

yourAnswerToTheQuestion