2017-10-17 1 views
2

안드로이드 응용 프로그램의 일부 문자열을 보호하고 싶습니다.이 문자열에는 볼 수없는 정보가 들어 있습니다. 지금까지 해 본 가장 좋은 아이디어는 AES 알고리즘 등을 사용하여 이러한 문자열을 암호화하고 인증 (Firebase Auth)으로 만 볼 수있는 Google Cloud Storage 파일에 비밀번호를 저장하는 것이므로 이론적으로 애플리케이션은 항상 액세스합니다. 필요할 때 그 파일. 이것은 좋은 생각입니까?안드로이드 응용 프로그램의 문자열 보호

+0

나는 그것이 좋은 아이디어라고 생각합니다. 그것이 좋은 생각이 아니라고 생각하게하는 것이 있습니까? –

답변

0

나는 이미 내 질문을 해결 한, 나는 아주 잘 작동 이러한 두 가지 방법이 있습니다 암호화 방법은 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"); 
} 

그리고 안드로이드에서 사용

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

오프라인 모드에서이 문자열이 필요하지 않는 한 매우 좋은 생각입니다. 그렇지 않으면 Keystore를 사용하십시오.

더 많은 정보 : https://developer.android.com/training/articles/keystore.html

예 : https://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/ 또한에서

오프라인 모드에서이 값이 필요하지 않습니다 - 당신은 저장의 키 저장소에 원격으로 만 개인 키 모든 문자열을 저장할 수 있습니다 .

관련 문제