2017-10-17 8 views
2

私はAndroidアプリケーションの一部の文字列を保護したいと考えています。私が今までに持っていた最善のアイデアは、AESアルゴリズムなどを使用してこれらの文字列を暗号化し、Google Cloud Storageファイルにパスワードを入れて(Firebase Authによる)認証でしか見ることができないということです。そのファイルを必要に応じてこれは良いアイデアですか?Androidアプリケーションの文字列保護

+0

私はそれは良いアイデアだと思います。それは良い考えではないと思う何かがありますか? –

答えて

0

は、私はすでに私の質問を解決してきた、私は非常にうまく機能するこれらの2つの方法があります:暗号化方式はAESでメッセージを暗号化し

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; 
    } 

した後に、それが読めるの中に、バイト[]を作るためにBase64を使用していますstrings.xmlファイルまたはJavaクラスに格納できる文字列で、decryptメソッドは逆の処理を行います。私のアプリケーションは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> 
0

あなたは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 

} 

} 

を、私はそれはあなたの問題を助けることができると思います!

+0

これは悪い考えです。 ".so"ファイルのプレーンテキストをすべて取得できます。 –

0

オフラインモードでこの文字列を必要としない限り、とても良いアイデアのようです。それ以外の場合は、キーストアを使用します。

詳細情報:https://developer.android.com/training/articles/keystore.html

例:https://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/加えて

オフラインモードで、この値は必要ありません - あなたは保管し、そのキーストア内とリモートの秘密鍵だけではないすべての文字列を格納することができます。

関連する問題