Реализация шифрования AES 256 в Android - PullRequest
2 голосов
/ 06 февраля 2012

Я знаю, что этот вопрос настолько популярен в StackOverflow, что AES 256 реализован в Android, но основная проблема заключается в том, что никакое решение не дает точного шифрования и дешифрования AES 256. Все коды объясняются с помощью Key Length of 128 и 256, которые не правильно.

KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed(seed);
        kgen.init(256, sr); // 192 and 256 bits may not be available
        SecretKey skey = kgen.generateKey();
        byte[] raw = skey.getEncoded();
        return raw;

Но мне нужно отличаться от этого тем, что реализация AES 256 отличается от длины ключа 256. Пожалуйста, предложите мне правильное решение относительно того же.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

Если у вас есть пароль, то вы должны использовать PBKDF2 . Если нет, то, вероятно, достаточно просто взять хэш SHA-256 материала ключа, который будет 256-битным. Для 128-битного ключа просто используйте половину хеша.

Обратите внимание, что использование материала ключа длиной менее 100 бит крайне нежелательно.

0 голосов
/ 06 февраля 2012

AES256 всегда использует 256-битный ключ. Если материал ключа имеет другую длину, вы можете использовать вывод хеш-функции, такой как SHA-256, чтобы получить 256-битный ключ.

Но если ваш ключевой материал имеет энтропию менее 256 бит, это, очевидно, означает, что вы не получите 256 бит безопасности. Практическая безопасность страдает, когда вы получаете значительно ниже 128 бит безопасности.

Если материал ключа является паролем, используйте функцию получения ключа, например PBKDF2, чтобы получить ключ. Это намеренно медленно, чтобы повысить безопасность при относительно низких энтропийных паролях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...