Выход:
import javax.crypto.Cipher;
public abstract class Crypto {
private static final String CIPHER_ALGORITHM = "AES/CTR/NoPadding";
private String AesKeyString = "ByWelFHCgFqivFZrWs89LQ==";
private void setKey() throws NoSuchAlgorithmException{
byte[] keyBytes;
keyBytes = Base64.getDecoder().decode(AesKeyString);
aesKey = new SecretKeySpec(keyBytes, "AES");
}
protected byte[] execute(int mode, byte[] target, byte[] iv)
throws Exception{
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(mode, aesKey, ivSpec);
return cipher.doFinal(target);
}
}
тветствии сРекомендация NIST - Приложение B, есть два правильных подхода для построения начальных блоков счетчиков (AES - это 128-битный блочный шифр):
128-битный одноразовый номер XORed сmзначение счетчика (обычно 32 бита).64-битный одноразовый номер добавляется к 64-битному счетчику.Мой вопрос:
Какова точная процедура относительно начального блока счетчика, используемого вAES / CTR / NoPadding"экземпляр javax.crypto.Cipher (принимая SunJCE в качестве поставщика)? То есть, учитывая приведенный выше код, какой из предыдущих подходов для начального блока счетчика используется, если таковой имеется?