2011-02-25 3 views
4

나는 이제 막 시작한 이래로 Android 앱 (학습용)에 대한 아이디어를 얻었습니다. 기본적으로 기억해야 할 암호를 "저장/저장"할 수있는 앱입니다. 그러나 SQlite (저장소 중앙값)를 통해 암호화/해독합니다. Android/SQlite3는 어떤 유형의 암호화를 할 수 있습니까?Android SQlite 비밀번호 암호화?

답변

3

아마도 Android의 javax.crypto 패키지를 사용하고 암호화 된 데이터를 sqlite3 행에 저장하려고합니다.

대칭 암호화를 제공하므로 사용자가 암호를 입력하여 암호로 암호화 된 데이터베이스의 내용을 잠금 해제 할 수 있습니다.

+0

Windows에서 이것을 해독 할 수 있습니까? 이 sqlite를 Windows에 복사하고 해독합니다. 하지만 어느 누구도 중간에 읽지 않기를 원합니다. –

4

암호화 된 암호를 인코딩하기 위해 apache commons Base64를 사용합니다. db에 Blob로 암호를 저장하게됩니다.

import javax.crypto.Cipher; 
import javax.crypto.SecretKey; 
import javax.crypto.SecretKeyFactory; 
import javax.crypto.spec.DESKeySpec; 
import org.apache.commons.net.util.Base64; 

    private static SecretKey key; 

     try { 
      byte[] secretBytes = "secret key".getBytes("UTF8"); 
      DESKeySpec keySpec = new DESKeySpec(secretBytes); 
      SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
      key = keyFactory.generateSecret(keySpec); 
     } catch (Exception e) { 
      Log.e(Flashum.LOG_TAG, "DatabaseHelper " + e.toString()); 
     } 

    public byte[] encryptPassword(String userpw) { 
     try { 
     byte[] cleartext = userpw.getBytes("UTF8");  

     Cipher cipher = Cipher.getInstance("DES"); 
     cipher.init(Cipher.ENCRYPT_MODE, key); 
     byte[] clearBytes = cipher.doFinal(cleartext); 
     byte[] encryptedPwd = Base64.encodeBase64(clearBytes); 
     return encryptedPwd; 
     } catch (Exception e) { 
     Log.e(Flashum.LOG_TAG, "DatabaseHelper " + e.toString()); 
     } 
     return null; 
    } 

    public String decryptPassword(byte[] userpw) { 
     String pw = ""; 
     try { 
     byte[] encrypedPwdBytes = Base64.decodeBase64(userpw); 

     Cipher cipher = Cipher.getInstance("DES"); 
     cipher.init(Cipher.DECRYPT_MODE, key); 
     byte[] plainTextPwdBytes = cipher.doFinal(encrypedPwdBytes); 
     pw = new String(plainTextPwdBytes, "UTF8"); 
     } catch (Exception e) { 
     Log.e(Flashum.LOG_TAG, "DatabaseHelper " + e.toString()); 
     } 
     return pw; 
    } 
+2

DES 알고리즘은 2001 년에 폐기되었으며, AES (Advanced Encryption Standard)로 바뀌 었습니다. 왜냐하면 bruteforce 공격에 취약하기 때문입니다. 너는 그것을 사용하면 안된다. – Benedictus