Шифр больше не поддерживается.

у защитить некоторые строки в своем приложении для Android, они содержат информацию, которую не следует просматривать. Лучшая идея, которая у меня была до сих пор, - это зашифровать эти строки с помощью алгоритма AES или чего-то подобного и поместить пароль в файл облачного хранилища Google, который можно просматривать только с аутентификацией (Firebase Auth), поэтому теоретически приложение всегда получает доступ тот файл, когда нужно. Это хорошая идея?

 Nabin Bhandari17 окт. 2017 г., 04:23
Я думаю, что это хорошая идея. Есть ли что-то, что заставляет вас думать, что это не очень хорошая идея?

Ответы на вопрос(3)

Решение Вопроса

у меня есть эти два метода, которые работают очень хорошо:

public static String encrypt(String message, String key) {
        String cipherText = null;

        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"));
            byte[] bytes = cipher.doFinal(message.getBytes("UTF-8"));

            cipherText = Base64.encodeToString(bytes, Base64.DEFAULT);
        } catch(Exception ex) {
            ex.printStackTrace();
        }

        return cipherText;
    }

    public static String decrypt(String encoded, String key) {
        String decryptString = null;

        try {
            byte[] bytes = Base64.decode(encoded, Base64.DEFAULT);

            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"));
            decryptString = new String(cipher.doFinal(bytes), "UTF-8");
        } catch(Exception ex) {
            ex.printStackTrace();
        }

        return decryptString;
    }

После того как метод encrypt зашифровывает сообщение в AES, он использует Base64 для преобразования байта [] в читаемую строку, которая может храниться в файле strings.xml или в классе Java, а метод расшифровки выполняет обратное. А мое приложение только забирает ключ онлайн через Firebase Storage.

Теперь, если кто-то попытается реконструировать мой код, единственное, что он может увидеть, это:

<string name="code_1">nuD559T1j8VSqjidiF3Yag==</string>
    <string name="code_2">+4MTk9TaJJAJEV6D07K++Q==</string>
    <string name="code_3">4GlPuHyAGhd48bjuSvcvQQ==</string>
    <string name="code_4">yQnq3/tEIxJe67bhBuzoHw==</string>
    <string name="code_5">p/sDptvxdi0ynsuybvfI+A==</string>
    <string name="code_6">dE4aV0wG0aINh/dw0wwevQ==</string>
    <string name="code_7">vxNaPmHvnbGsydOYXSOSUA==</string>
    <string name="code_8">fClfcC/Eweh9tA8xz6ktGw==</string>
    <string name="code_9">FxzAZpH+SJt5Lv6VFU/BEQ==</string>
    <string name="code_10">qh3jFGHOGMzt50WOwTG4H4Y2Vbr7TzO433tbB3s6P34=</string>
    <string name="code_11">u7kZjN/bxkMEqDws4nvbnQ==</string>
    <string name="code_12">Ccf2u8FJGJ1lsiR7aX5OSw==</string>
    <string name="code_13">E4XsWDHO28pOhV4ter/f2A==</string>
    <string name="code_14">kgPr+Yz3t4S+Y5zQXjkvJA==</string>
    <string name="code_15">19CpjUzKOw1fL8bZH8xkMg==</string>
 Muhammad17 янв. 2019 г., 16:52
Шифр больше не поддерживается.

Вы можете сослаться на NDK: Пример:

#include <string.h>
#include <jni.h>

jstring Java_com_riis_sqlndk_MainActivity_invokeNativeFunction(JNIEnv* env,
jobject javaThis) {
  return (*env)->NewStringUTF(env, "pass123");
}

И использовать в Android:

    public class MainActivity extends Activity {

    static {
        System.loadLibrary("sqlndk");                           // line 11
        }

    private native String invokeNativeFunction();               // line 14


    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         String key = invokeNativeFunction();                 // line 21 

}

}

Я надеюсь, что это может помочь вашей проблеме!

 Nabin Bhandari17 окт. 2017 г., 04:21
Это плохая идея, вы можете получить все простые тексты в файлах ".so".

если вам не нужны эти строки в автономном режиме. В противном случае используйте Keystore.

Больше информации:https://developer.android.com/training/articles/keystore.html

Пример:https://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/

К тому же Когда вам не нужны эти значения в автономном режиме - вы можете сохранить их в Keystore и хранить удаленно только закрытый ключ, а не все строки.

Ваш ответ на вопрос