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

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

Войти
Регистрация
Восстановить пароль
 
Taraun
0 / 0 / 0
Регистрация: 14.09.2015
Сообщений: 2
#1

Aes шифрование на Android - Программирование Android

29.09.2016, 15:38. Просмотров 279. Ответов 0
Метки нет (Все метки)

Добрый день.
Разработал модуль для Aes256 шифрования на java (Ну как разработал? Что-то позаимствовал, ну около 80% кода)
На сервере работает на ура (Сервер Apache tomcat 6.0)
Но при переносе на смартфон выпадает в ошибку.

Вываливается Null Pointer в строке:
Cipher cipher = Cipher.getInstance(ALGO, "SunJCE");

Причем если не указывать SunJCE, те:
Cipher cipher = Cipher.getInstance(ALGO);

Он отрабатывает, но в этом случае шифрование идет не тем методом что мне нужен. (особенности сервера)

Пробовал смотреть куда он лезет, накопал несколько странных вещей:

Ошибка в android-sdk Security.java (screen1)

С чем может быть связано такое поведение?

Собственно код:
Кликните здесь для просмотра всего текста

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import java.io.UnsupportedEncodingException;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.*;
//import sun.misc.BASE64Decoder;
//import sun.misc.BASE64Encoder;
 
import com.GreenHouseMobile.Base64.BASE64Encoder;
import com.GreenHouseMobile.Base64.BASE64Decoder;
 
/**
 *
 * @author
 */
public class Aes256 {
 
    private static String password;
    private static int keySize = 256;
    private static final String ALGO = "AES"; //"AES/ECB/PKCS5Padding"
    private static Aes256 instance;
 
    private static SecretKey key;
    public static String sekretPasKey;
 
    public synchronized static Aes256 getInstance() throws UnsupportedEncodingException {
        if(instance == null) {
 
            instance = new Aes256();
        }
 
        return instance;
    }
 
    public static String getKey()
    {
        return new BASE64Encoder().encode(key.getEncoded());
    }
 
    public String setKey(String passKey) throws UnsupportedEncodingException
    {
        String result = "";
 
        password = passKey;
 
        key = new SecretKeySpec(safePassword(password).getBytes("UTF-8"), "AES");
 
        sekretPasKey = new BASE64Encoder().encode(key.getEncoded());
 
        return sekretPasKey;
    }
 
    private String pad2(String n) {
        if (n.length() < 2) {
            return "0" + n;
        } else {
            return n;
        }
    }
 
    public String hex(byte[] bytes) {
        String r = "";
        for (int i = 0; i < bytes.length; i++) {
            r = r + pad2(Integer.toHexString(bytes[i] + 128));
        }
        return r;
    }
 
    private static String safePassword(String unsafe) {
        String safe = unsafe;
        if (safe.length() > 16) {
            safe = safe.substring(0, 16);
        }
        int nn = safe.length();
        for (int i = nn - 1; i < 15; i++) {
            safe = safe + "*";
        }
        return safe;
    }
 
    public  String encrypt(String value){
 
        String result = "";
        byte[] encrypted = null;
        try{
 
            Cipher cipher = Cipher.getInstance(ALGO, "SunJCE");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            encrypted = cipher.doFinal(value.getBytes("UTF-8"));
            System.err.println(new BASE64Encoder().encode(encrypted));
            result = hex(encrypted);
        } catch(Exception e){
            e.printStackTrace();
        }
        //return result;
        return new BASE64Encoder().encode(encrypted);
    }
 
    private int parseInt2(String s) {
        return (new java.math.BigInteger(s, 16)).intValue();
    }
 
    private byte[] fromHex(String enc) {
        if (enc == null) {
            return null;
        }
        byte[] r = new byte[enc.length() / 2];
        for (int i = 0; i < r.length; i++) {
            int n = parseInt2(enc.substring(i * 2, i * 2 + 2)) - 128;
            r[i] = (byte) n;
        }
        return r;
    }
 
    public String decrypt(String value){
 
        String result = "";
        try{
            /*byte[] encypted = fromHex(value);
            if (encypted == null) {
                return "";
            } */
            System.err.println("Val: " + value);
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] encypted = decoder.decodeBuffer(value);
            System.err.println("Enc: " + encypted);
            //SecretKey key = new SecretKeySpec(safePassword(password).getBytes("UTF-8"), "AES");
 
            System.err.println(new BASE64Encoder().encode(key.getEncoded()));
            Cipher cipher = Cipher.getInstance(ALGO, "SunJCE");
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] decrypted = cipher.doFinal(encypted);
            result = new String(decrypted, "UTF-8");
        } catch(Exception e){
            e.printStackTrace();
        }
        return result;
    }
 
    private static String generateRandomString()
    {
        String symbols = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890";
        StringBuilder randString = new StringBuilder();
        int count = (int)(Math.random()*30);
        for(int i=0;i<count;i++)
            randString.append(symbols.charAt((int)(Math.random()*symbols.length())));
 
        return randString.toString();
 
    }
}


ЗЫ: Пишу на intellij idea 15.0.4
Настройки проекта screen2
Миниатюры
Aes шифрование на Android   Aes шифрование на Android  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 15:38     Aes шифрование на Android
Посмотрите здесь:

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

Ошибка дешифровки AES в Android: pad block corrupted - Программирование Android
Приветствую. В обучающих целях написал на Java программу для хранения паролей, использующую шифрование AES. Написал класс, в котором...

android:theme="@android:style/Theme.Dialog" - Программирование Android
android:theme=&quot;@android:style/Theme.Dialog&quot; как при таком отображение активности можно избежать затемнение( или что там с ней происходит)...

Шифрование SQLite - Программирование Android
Гуру, помогите! Кому-нибудь из Вас это удавалось??? Или хотя-бы слышали про такие НАДЕЖНЫЕ решения? Надо гарантированно защитить...

Шифрование базы данных - Программирование Android
У меня есть база данных. Мне надо ее зашифровать. есть https://guardianproject.info/code/sqlcipher/ все бы круто но меня смущает...

Шифрование - Spongy Castle - Программирование Android
Всем привет. Решил сделать программку для хранения паролей. Погуглив нашел вариант шифрования с помощью Spongy Castle -...

Android - Программирование Android
Пишу программу первый раз(HelloWorld). Программа написана без ошибок, но Android SDK не отображает ее. Сам SDK включается но написанная...

Android L - Программирование Android
Привет всем дорогие друзья. Меня вот что интересует. Знаю что достаточно времени назад вышел L для разработчиков. Гайды по оформлению и...

Android - Программирование Android
Всем доброго времени суток! Есть вопрос! Код приложения который написан на эклипсе например игра! Если этот код использовать в Андроид...

Qt 5.1.1 for Android - Программирование Android
Здравствуйте! Пытаюсь, использовать библиотеку Qt для Android, установил всё по инструкции на сайте: Android SDK, NDK, JM, Ant, ну, и сам...

Android с 0 - Программирование Android
Всем привет. Когда-то давно начинал изучать Андроид не зная Java(за что, конечно, поплатился), и сейчас решил вновь заняться разработкой...

С++ и android - Программирование Android
Привет форумчане, такая ситуация. Мой друг изучил доволи неплохо с++ , и вот натрапил на разработку под андроид и стоит перед вопросом,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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