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

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

Восстановить пароль Регистрация
Другие темы раздела
Android Угадать виджет по рисунку http://www.cyberforum.ru/android-dev/thread1815953.html
Добрый день! Как называется данный элемент (выделено стрелкой)? И есть ли он в стандартных элементах?
Android Null при вызове метода из другого класса Суть такая. Я создал приложение с двумя активити NavigationView (через стандартный конструктор Adroid Studio). В шапку NavView я вывожу информацию об устройстве (есть два метода которые выводят инфу к текствью в шапке). Мне нужно сделать так, чтобы при переходе на другие активити информация в шапке обновлялась из метода первого вью. Но выкидывается исключение NullPointer. В чем может быть... http://www.cyberforum.ru/android-dev/thread1815945.html
Background меняет height компонента Android
Привет. У меня есть toolbar (из android.support.v7.widget.Toolbar). У него android:layout_height="wrap_content" Я ставлю на фон картинку бОльшую чем получается wrap_content, и toolbar растягивается из-за картинки. Я хочу чтобы background подстраивался под уже имеющийся height и никак не влиял на размер компонента. Тоесть пусть из-за wrap_content toolbar на разных устройствах будет разный, я...
Не видны программно созданные файлы Android
с компа не видны программно созданные на телефоне файлы, как поправить?
Android Как работает внедрение зависимостей, и зачем нужно его использовать? http://www.cyberforum.ru/android-dev/thread1815211.html
Как работает внедрение зависимостей? И в каких ситуациях, зачем нужно его использовать?Например если я объявил поле как @Inject то как к нему потом обращаться как его инициализировать можете подробно объяснить на каком нибудь простеньком примере?
Android Потоки не работают параллельно Написал я такой кусок кода (все это внутри класса MainActivity): class CalcFiveSecClass extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... noargs) { return CalcFiveSecFunc(); } @Override подробнее

Показать сообщение отдельно
Taraun
0 / 0 / 0
Регистрация: 14.09.2015
Сообщений: 2
29.09.2016, 15:38     Aes шифрование на Android
Добрый день.
Разработал модуль для 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  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru