Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Dimarzio
5 / 0 / 0
Регистрация: 12.08.2016
Сообщений: 3
1

Ошибка дешифровки AES в Android: pad block corrupted

12.08.2016, 09:45. Просмотров 602. Ответов 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;
 }
 }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2016, 09:45
Ответы с готовыми решениями:

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

Ошибка: Caused by Android java.lang.ClassCastException: android.app.Application cannot be cast
Здравствуйте. Очень нужен ваш совет. При запуске приложения появляется ошибка:...

Ошибка в Android Studio Error:No resource identifier found for attribute 'appComponentFactory' in package 'android'
Доброго времени суток! При компиляции андроид приложении выходит данная...

(Android studio, java) Ошибка при импорте библиотеки cannot resolve symbol android studio
Вот библиотека https://github.com/mik3y/usb-serial-for-android. Устанавливал...

Не работает функция дешифровки строки из AES
Я не знаю, что я делаю не так, потому что на вашем форуме в разделе "C++/CLI...

3
Dimarzio
5 / 0 / 0
Регистрация: 12.08.2016
Сообщений: 3
09.09.2016, 09:16  [ТС] 2
Разобрался сам, спасибо за помощь!
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,946
09.09.2016, 09:23 3
Dimarzio, учитывая что аналогичные "трудности" могут испытывать другие разработчика с вашей стороны было бы великим делом оставить в своей теме правильное решение
0
Dimarzio
5 / 0 / 0
Регистрация: 12.08.2016
Сообщений: 3
13.09.2016, 20:21  [ТС] 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;
}
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2016, 20:21

ORA-01578: ORACLE data block corrupted
Добрый день. ОС: Windows 7 64 bit Base: Oracle 11g Express Edition 32 bit...

Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите...

Ошибка: Stack was corrupted
Здравствуйте уважаемые программисты. Написал простейшую программу заполнения...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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