Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Dimarzio
5 / 0 / 0
Регистрация: 12.08.2016
Сообщений: 3
#1

Ошибка дешифровки AES в Android: pad block corrupted - Программирование Android

12.08.2016, 09:45. Просмотров 350. Ответов 3

Приветствую. В обучающих целях написал на Java программу для хранения паролей, использующую шифрование AES. Написал класс, в котором применяются методы из пакета javax.crypto. В приложении на Windows все отлично работает, шифрует и дешифрует. Решил сделать мобильную версию этого приложения на Android, для aes использовал тот же класс, но возникла проблема - данные не дешифруются, выкидывает исключение: javax.crypto.BadPaddingException: pad block corrupted. Почему так происходит?

Код моего класса:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class AES {
public static SecretKeySpec getSecretKeySpec(String data) {
try {
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
            sr.setSeed(data.getBytes());
            KeyGenerator kg = KeyGenerator.getInstance("AES");
            kg.init(128, sr);
            return (new SecretKeySpec((kg.generateKey()).getEncoded(), "AES"));
        } catch (Exception e) {
          System.out.println("Ошибка при получении секретного ключа!");
        }
        return null;
    }
   public static byte[] encode(SecretKeySpec sks, byte[] data) {
        try {
            Cipher c = Cipher.getInstance("AES");
            c.init(Cipher.ENCRYPT_MODE, sks);
            return c.doFinal(data);
        }
        catch (Exception e){
         System.out.println("Ошибка операции шифрования!");
        }
    return null;
    }
 
 
public static byte[] decode(SecretKeySpec sks, byte[] data) {
try {
  Cipher c=Cipher.getInstance("AES");
  c.init(Cipher.DECRYPT_MODE,sks);
  return c.doFinal(data);
  }
 catch (Exception e) {
 System.out.println("Ошибка операции дешифровки");
  }
 return null;
 }
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2016, 09:45     Ошибка дешифровки AES в Android: pad block corrupted
Посмотрите здесь:

AES для Android - Программирование Android
Всем привет! Я столкнулся с проблемой написания программы шифрования стандарту AES для мобильной платформы Android. Подскажыте какие...

Ошибка в Preferences в Android 4.4 - Программирование Android
Здравствуйте! Не могу понять суть ошибки, на всех версиях Android 2.2+ программа выполнялась корректно, до выхода Kit kat... У меня в...

Android-support-v7 ошибка - Программирование Android
Добрый вечер, устанавливал google maps API для проекта. и случайно видимо обновился support вечером все работало нормально, после...

Ошибка Android Studio - Программирование Android
Ребята очень срочно нужна помощь!!!! При запуске android studio возникает ошибка Error:Unable to start the daemon process. This...

Ошибка R в Android Studio - Программирование Android
R обозначается красным цветом после установки Android Studio package com.example.root.myapplication; import...

Ошибка android.osNetworkOnMainThreadException - Программирование Android
Есть клиент (андроид приложение) в котором есть поле и кнопка отправить. Код для (кнопки отправить) @Override public void...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dimarzio
5 / 0 / 0
Регистрация: 12.08.2016
Сообщений: 3
09.09.2016, 09:16  [ТС]     Ошибка дешифровки AES в Android: pad block corrupted #2
Разобрался сам, спасибо за помощь!
vxg
Модератор
3140 / 1942 / 214
Регистрация: 13.01.2012
Сообщений: 7,431
09.09.2016, 09:23     Ошибка дешифровки AES в Android: pad block corrupted #3
Dimarzio, учитывая что аналогичные "трудности" могут испытывать другие разработчика с вашей стороны было бы великим делом оставить в своей теме правильное решение
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2016, 20:21     Ошибка дешифровки AES в Android: pad block corrupted
Еще ссылки по теме:

Ошибка EndofMemory в Android - Программирование Android
Иногда, при переходе на другую активность вылетает ошибка "EndofMemory". Приложение закрывается и в тот же момент открывается на той же...

Ошибка в Android studio - Программирование Android
Осваиваю разработку на Android. Застопорился на этой статье: http://developer.alexanderklimov.ru/android/activity.php Android Studio...

Ошибка Java в Android Studio - Программирование Android
Доброго времени суток! Вообще JVM позволяет запустить Android Studio буз проблем, но сама "студия" не хочет ничего компилировать. В...

Что за ошибка в Android Studio? - Программирование Android
Как их исправить?

Ошибка установки android sdk - Программирование Android
Уважаемые Гуру! Пытаюсь установить xamarin для программирования ios/adnroid. Получаю сообщение , что далее будет загружено и установлено...

Ошибка Grade в Android Studio в Ubuntu - Программирование Android
Помогите пожалуйста с ошибкой в Android Studio:) После установки Android Studio 2.2 на Ubuntu(linux) и создании проекта выводится вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Dimarzio
5 / 0 / 0
Регистрация: 12.08.2016
Сообщений: 3
13.09.2016, 20:21  [ТС]     Ошибка дешифровки AES в Android: pad block corrupted #4
Дело в том , что, Андроид использует другие провайдеры шифрования, в отличии от Windows, и в данном фрагменте:
Java
1
2
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
            sr.setSeed(data.getBytes());
генерируется каждый раз новый ключ.
Для решения проблемы нужно выбирать другой алгоритм генерации ключа.
Вот один из вариантов, который я нашел:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static byte[]encrypt(String key, byte[] data, String iv) {
        final byte[]keyBytes=key.getBytes();
        final byte[] ivBytes=iv.getBytes();
        
 
        try {
            byte[] result;
            SecretKeySpec sks=new SecretKeySpec(keyBytes,"AES");
            Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
            c.init(Cipher.ENCRYPT_MODE, sks, new IvParameterSpec(ivBytes));
            result=c.doFinal(data);
            return result;
 
        }
        catch (Exception e){
            System.out.println("Ошибка шифрования! - "+ e);
        }
    return null;
    }
Теперь мой класс выглядит так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class AES {
    
    public static byte[]encrypt(String key, byte[] data, String iv) {
        final byte[]keyBytes=key.getBytes();
        final byte[] ivBytes=iv.getBytes();
        
 
        try {
            byte[] result;
            SecretKeySpec sks=new SecretKeySpec(keyBytes,"AES");
            Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
            c.init(Cipher.ENCRYPT_MODE, sks, new IvParameterSpec(ivBytes));
            result=c.doFinal(data);
            return result;
 
        }
        catch (Exception e){
            System.out.println("Ошибка шифрования! - "+ e);
        }
    return null;
    }
public static byte[] decrypt (String key, byte[]data, String iv) {
  byte[] result;
  final byte[]keyBytes=key.getBytes();
  final byte[]ivBytes=iv.getBytes();
  
    try {
      SecretKeySpec sks=new SecretKeySpec(keyBytes, "AES");
        Cipher c=Cipher.getInstance("AES/CBC/PKCS5Padding");
      c.init(Cipher.DECRYPT_MODE,sks, new IvParameterSpec(ivBytes));
        result=c.doFinal(data);
        return result;
  }
catch (Exception e) {
System.out.println("Ошибка дешифровки! - "+e);
}
return null;
}
}
Yandex
Объявления
13.09.2016, 20:21     Ошибка дешифровки AES в Android: pad block corrupted
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru