Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
titleUsage
collapsetrue
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Base64;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;

import com.sos.commons.encryption.EncryptionUtils;
import com.sos.commons.encryption.common.EncryptedValue;
import com.sos.commons.encryption.decrypt.Decrypt;
import com.sos.commons.encryption.encrypt.Encrypt;
import com.sos.commons.sign.keys.key.KeyUtil;

private String encrypt(String valueToEncrypt, String pathToCertificate) throws Exception {
        // algorithm to encrypt the value with
    String algorithm = "AES/CBC/PKCS5Padding";
        // generated initialization vector
    IvParameterSpec ivParameterSpec = EncryptionUtils.generateIv();
        // initialization vector base64 encoded for output
    byte[] ivBase64Encoded = Base64.getEncoder().encode(ivParameterSpec.getIV());
        // generate a symmetric key on the fly to encrypt the desired value  
    SecretKey key = EncryptionUtils.generateSecretKey(256);
    X509Certificate cert = KeyUtil.getX509Certificate(Paths.get(pathToCertificate));
        // encrypt the symmetric key with the given certificate
    byte[] encryptedKey = EncryptionUtils.encryptSymmetricKey(key, cert);
        // encrypt the desired value with the symmetric key 
    String encryptedValue = Encrypt.encrypt(algorithm, valueToEncrypt, key, ivParameterSpec);
        // return the concatenated ouptut in the format "<encrypted-syymetricsymmetric-key> <base64-encoded-iv> <encrypted-value>"
    return Encrypt.concatOutput(new String(encryptedKey), new String(ivBase64Encoded), encryptedValue);
}

...

Code Block
languagejava
titleUsage
collapsetrue
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Base64;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;

import com.sos.commons.encryption.EncryptionUtils;
import com.sos.commons.encryption.common.EncryptedValue;
import com.sos.commons.encryption.decrypt.Decrypt;
import com.sos.commons.encryption.encrypt.Encrypt;
import com.sos.commons.sign.keys.key.KeyUtil;

private String decrypt(String encryptedValue, String pathToPrivateKey) throws Exception {
    Path privateKeyPath = Paths.get(pathToPrivateKey);
    PrivateKey priv = KeyUtil.getPrivateKeyFromString(Files.readString(privateKeyPath));
    EncryptedValue envValencVal = EncryptedValue.getInstance("decrypt", encryptedValue);
    return Decrypt.decrypt(envValencVal, priv);
}

Test

An example on how to run the above examples with a JUnit test.

...