Encrypt Configuration Properties
Updated at 1699804387000database.password=ENC(mWUgQdrI9HiTI3oGJdmfYCBkV7b58ACDe2yy9AC4gAM=)
1. Generate encryption key
You need some steps to generate encryption key:
- Clone properties-file repo
- Import the repo to your IDE, example: IntelliJ
- Open file EncryptionTool
- Run the file and you will see in the Run Log like this:
key: HjcisAmIXusz3FLTBE6IbIJ6siI6gI3t
, let's copy the key HjcisAmIXusz3FLTBE6IbIJ6siI6gI3t
and store somewhere
2. Encrypt a property value
Let's say we need encrypt property value: Hello World
with the key HjcisAmIXusz3FLTBE6IbIJ6siI6gI3t
, we will need do some step:
- Open file EncryptionTool
- Change the main function like this:
public static void main(String[] args) { String key = "HjcisAmIXusz3FLTBE6IbIJ6siI6gI3t"; // change to your key String message = "Hello World"; String encryptedMessage = encrypt(message, key); System.out.println("encrypted message: " + encryptedMessage); }
- You will se the log:
encrypted message: ENC(uvZ92aXCSlSbAAKo9rJYnXq9yE6kcAgdgSaS1yD4Tzw=)
- Now you can input to your application.properties:
hello_world=ENC(uvZ92aXCSlSbAAKo9rJYnXq9yE6kcAgdgSaS1yD4Tzw=)
3. Decrypt the property value
There are some ways you can use to set encryption:
- Store in application.properties:
properties.decryption_key=HjcisAmIXusz3FLTBE6IbIJ6siI6gI3t
: but this way is not secure, because everyone can see the file and use key to decrypt properties value - Store in system environment:
properties.decryption_key=HjcisAmIXusz3FLTBE6IbIJ6siI6gI3t
: this way is better because just someone can access the server - Run java application with vm options like this:
-Dproperties.decryption_key=HjcisAmIXusz3FLTBE6IbIJ6siI6gI3t
After set the encryption key, you can read the decrypted property value. With properties-file, you can do like this:
Properties properties = new MultiFileReader() .read("application.properties"); PropertiesUtil.setVariableValues(properties);
With ezyfox-bean, ezyfox-server, ezyhttp and every framework of youngmonkeys: you will don't need anything, it will decrypt and bind the property value automatically for you. For ezyfox-server, you can put -Dproperties.decryption_key=your encryption key
vm option to console.bat
, console.sh
and start-service.sh
files.