Android AES Шифрование Zero Padding - PullRequest
3 голосов
/ 29 июля 2011

Мне нужно зашифровать файл, используя AES, с размером блока CBC 16 байтов и ключом 256 бит.И файл должен быть дополнен нулями до кратного 16 байтов.И после шифрования файла количество дополненных нулей должно быть добавлено до конца.

Например, если у меня есть файл, который составляет 9 байтов, 7 нулевых байтов будут добавлены.16 байтов будут зашифрованы, а затем длина считанных данных, 9, будет добавлена ​​в конец.Таким образом, общая длина должна составлять 17 байтов с последним незашифрованным последним байтом.

Я использую класс Cipher и знаю, что нужно использовать «AES / CBC /», но я не знаю, есть ли заполнениеметод, который описывает то, что я хочу.

РЕДАКТИРОВАТЬ: последний байт должен быть, сколько байтов являются реальными данными в последней 16-байтовой заполненной ячейке.

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

Не уверен, что вы уже решили свою проблему, но я думаю, что тип заполнения, который вы ищете, - ZeroBytePadding .Этот код работает для меня на симуляторе 2.3.3:

String stringKey = "60380131061660211660380426804995";
String message = "This is a secret message";
try {
    SecretKeySpec sks = new SecretKeySpec(stringKey.getBytes(),"AES");
    Cipher c = Cipher.getInstance("AES/ECB/ZeroBytePadding"); // Change to CBC and use appropriate IV
    c.init(Cipher.ENCRYPT_MODE, sks);
    c.update(message.getBytes());
    byte[] ciphertext = c.doFinal();
    Log.i("CE", new String(ciphertext));

    } catch (NoSuchAlgorithmException e) {
        Log.e("CE",e.getMessage());
    } catch (NoSuchPaddingException e) {
        Log.e("CE",e.getMessage());
    } catch (InvalidKeyException e) {
        Log.e("CE",e.getMessage());
    } catch (IllegalBlockSizeException e) {
        Log.e("CE",e.getMessage());
    } catch (BadPaddingException e) {
        Log.e("CE",e.getMessage());
}
0 голосов
/ 30 июля 2011

Вам не нужно ничего делать вручную, поскольку в Android есть все необходимые вам библиотеки (через JCE), чтобы сделать это безболезненно.

Я разместил код шифрования AES, который я написал для приложения для Android, здесь: http://pocket -for-android.1047292.n5.nabble.com / Encryption-method-and-read-the-Dropbox-backup- td4344194.html # a4454327

Возможно, вы захотите обратить внимание на схемы заполнения, которые в моем случае были PKCS5Padding.

...