2016-12-05 1 views
1

나는 this 질문 및 이와 유사한 질문을 겪었지만 여전히 이것을 파악할 수는 없습니다.안드로이드에서 기존 영역 데이터베이스에 암호화를 적용하는 방법은 무엇입니까?

이전에 내 안드로이드 앱에 SQLite을 사용하고있었습니다. 미리 채워진 크기의 Sqlite 데이터베이스는 약 15MB입니다. 임시 데이터베이스에 내 레코드를 임시 데이터베이스로 저장하여 새로운 영역 데이터베이스에 저장했습니다. 이 새로운 영역 데이터베이스의 크기는 약 150MB였습니다. 그런 다음 Mac에서 Realm 브라우저로 열어 압축했습니다. 이제 크기가 15MB로 줄었습니다.

새 데이터베이스를 생성하는 동안 암호화를 사용하고 sqlite 행을 복사하면 크기는 약 150MB입니다. 16 진수 암호를 사용하여 열었을 때 잘 열립니다. 그런 다음 이전 크기로 다시 압축하여 보통 15MB 크기로 되돌립니다. 하지만, 이유가 모르겠다. 암호화가 이제 제거되었습니다..

이 문제를 해결하기 위해 나는 한 가지 해결책만을 생각할 수 있습니다. 이미 압축 된 영역 데이터베이스에 암호화를 적용 할 수 있다면. 하지만 안드로이드에서 어떻게해야 하는지를 알 수 없었습니다.

편집 - 일부 관련 부품 - 압축 데이터베이스에 암호화 된 데이터베이스를 변환

@Override 
    public void onClick(View view) { 
     switch (view.getId()) { 
      case R.id.button_sqlite2realm: 
       DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this); 
       databaseAccess.open(); 
       questionsList = databaseAccess.getAllQuestions(); 
       databaseAccess.close(); 

       Realm realm = Realm.getInstance(config); 
       realm.executeTransaction(new Realm.Transaction() { 
        @Override 
        public void execute(Realm realm) { 
         for (QuestionBank question : questionsList){ 
          realm.copyToRealmOrUpdate(question); 
         } 
        } 
       }); 
       break; 
     } 
    } 

- -

1 부 -

Realm.init(this); 
byte[] key = new byte[64]; // Just for demonstration 
RealmConfiguration config = new RealmConfiguration.Builder() 
       .name("QBank.realm") 
       .directory(getExternalFilesDir(null)) 
       .encryptionKey(key) 
       .build(); 
Realm realm = Realm.getInstance(config); 

2 부> 나는이 영역을 뽑아 안드로이드 에뮬레이터에서 데이터베이스 -> 영역 브라우저에서 (16 진수 비밀 번호) -> 압축 (하지만이 새로 열었습니다 생성 된 압축 데이터베이스는 이제 암호화되지 않음)

P. - 내 질문에 기술적 인 내용이 포함되어 있지만이 방법을 찾지 못했습니다.

+0

영역 데이터베이스를 닫으시겠습니까? 가능하면 복사 할 코드를 공유 하시겠습니까? –

+0

미안하지만 당신을 얻지 못했습니다. 'sqlite'에서'realm'으로 또는 암호화에서 압축으로 복사하는 코드입니까? –

+0

@PravinD, 관련 정보와 함께 제 질문을 업데이트했습니다. –

답변

0

내가 생각하는 것처럼 똑같은 문제를 지적한 this question.

압축은 데이터에서 패턴을 찾아야합니다. 암호화하면 같은 패턴이 모두 제거됩니다.

암호화하기 전에 압축을해야합니다. 암호화는 데이터를 높은 엔트로피 데이터 (일반적으로 임의 스트림과 구별 할 수 없음)로 변환합니다. 압축은 크기를 줄이기 위해 패턴을 사용합니다. 암호화가 이러한 패턴을 파괴하기 때문에 압축 알고리즘은 암호화 된 데이터에 적용하면 크기를 크게 줄일 수 없습니다.

다른 도움이 필요하면 알려주세요.

희망이 도움이 될 것입니다. 해피 코딩 !!