Выход:

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 в качестве поставщика)? То есть, учитывая приведенный выше код, какой из предыдущих подходов для начального блока счетчика используется, если таковой имеется?

Ответы на вопрос(1)

Ваш ответ на вопрос