package testcode.crypto.iv;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import testcode.util.HexUtil;
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import java.security.*;
import java.util.Random;
public class StaticVariableIv {
static Random r = new SecureRandom();
//Static IV ? potential reuse over time ?
static byte[] iv = new byte[16];
public static void init() {
Security.addProvider(new BouncyCastleProvider());
r.nextBytes(iv);
}
public static void encrypt(String message) throws Exception {
//IV
IvParameterSpec ivSpec = new IvParameterSpec(iv);
//Key
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(128);
SecretKey secretKey = generator.generateKey();
//Encrypt
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
cipher.update(message.getBytes());
byte[] data = cipher.doFinal();
System.out.println(HexUtil.toString(data));
}
}