Exemplo de encriptação e decriptação utilizando GCM com geração automática de IV.
package doxy.examples;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import com.dinamonetworks.Dinamo;
import br.com.trueaccess.TacException;
import br.com.trueaccess.TacNDJavaLib;
public class EncDecGcmIvAutoGen {
static String hsmIp = "127.0.0.1";
static String hsmUser = "master";
static String hsmUserPassword = "12345678";
public static void main(String[] args) throws TacException {
Dinamo api = new Dinamo();
api.openSession(hsmIp, hsmUser, hsmUserPassword);
String plainText = "asdfasdfasdfasdfasdfas";
byte[] originalData = plainText.getBytes(StandardCharsets.UTF_8);
String keyId = "aes256";
api.createKey(keyId, TacNDJavaLib.ALG_AES_256);
byte[] encKey = api.getUserKey(keyId);
api.setMode(encKey, TacNDJavaLib.MODE_GCM);
api.setIvAutoGeneration(encKey, true);
byte[] enc = api.encrypt(encKey, originalData, 0);
byte[] iv = api.getIv(encKey);
byte[] decKey = api.getUserKey(keyId);
api.setMode(decKey, TacNDJavaLib.MODE_GCM);
api.setIv(decKey, iv);
byte[] decrypted = api.decrypt(decKey, enc, 0);
if(!Arrays.equals(originalData, decrypted))
{
System.out.println("Dados decriptados não são iguais aos dados originais!");
return;
}
System.out.println("Dados decriptados com sucesso.");
api.deleteKeyIfExists(keyId);
}
}