Вопросы по криптографии Java (шифрование AES-ECB) - PullRequest
0 голосов
/ 07 февраля 2012

1) Я нигде не смог найти реализацию Java для шифрования JCE AES, но кто-нибудь знает, считается ли байтовый массив, который он принимает в качестве аргумента, подписанным или неподписанным? Код, который я использую:

public static byte [] ecbAesEncrypt(byte [] key, byte [] currentVector) {
        SecretKeySpec keySpec = null;
        Cipher cipher = null;
        byte [] encryptedValue = null;

        try {
            keySpec = new SecretKeySpec(key, "AES");

            cipher = Cipher.getInstance("AES/ECB/NoPadding");
            cipher.init(Cipher.ENCRYPT_MODE, keySpec);

            encryptedValue = cipher.doFinal(currentVector);
        }
        catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        if (DEBUG)
            printHex("AES-ECB encrypt: ", encryptedValue);

        return encryptedValue;
    }

2) Будет ли побитовое XOR 2 байтов со знаком давать те же результаты, что и побитовое XOR 2 байтов без знака? Под этим я подразумеваю, что только битовые представления будут одинаковыми. Я думаю, да, но просто хочу убедиться.

3) Отчасти связан вопрос 1: какие побитовые операции будут давать разные результаты между байтами со знаком и без знака?

1 Ответ

2 голосов
/ 07 февраля 2012

AES рассматривает байты как чисто двоичные данные. Не в виде чисел, которые имеют знак или не имеют знак.

В Java нет неподписанных байтов. Они всегда подписаны. Но знак имеет значение только тогда, когда вы делаете целочисленную аритметику на них.

Битовые операторы описаны в руководстве по Java .

...