Encryptor.java
package no.nav.data.common.security;
import org.springframework.security.crypto.encrypt.Encryptors;
import org.springframework.security.crypto.keygen.KeyGenerators;
import org.springframework.security.crypto.keygen.StringKeyGenerator;
import org.springframework.util.Assert;
public class Encryptor {
private final String key;
private static final StringKeyGenerator saltGenerator = KeyGenerators.string();
private static final int saltLength = saltGenerator.generateKey().length();
public Encryptor(String key) {
this.key = key;
}
public Enc encrypt(String text) {
String salt = saltGenerator.generateKey();
return new Enc(salt, Encryptors.text(key, salt).encrypt(text));
}
public String decrypt(String encryptedText) {
Assert.isTrue(encryptedText != null && encryptedText.length() > saltLength, "invalid encryptionText");
var enc = new Enc(encryptedText);
return Encryptors.text(key, enc.salt).decrypt(enc.cipher);
}
static String getSalt(String encryptedText) {
return encryptedText.substring(0, saltLength);
}
static String getCipher(String encryptedText) {
return encryptedText.substring(saltLength);
}
public record Enc(String salt, String cipher) {
public Enc(String saltedCipher) {
this(getSalt(saltedCipher), getCipher(saltedCipher));
}
public String saltedCipher() {
return salt + cipher;
}
}
}