AES를 사용한 SQLite 데이터베이스 복호화

Mohsen

내 데이터베이스를 암호화 하고이 게시물 의 답변을 사용하여 sdCard에 저장하려고합니다 . 하지만 문제는 databases내 앱 패키지 폴더에 파일을 다시 넣을 때 SQLiteOpenHelper. 오류 :

  • 08-30 10 : 58 : 35.692 : E / SQLiteLog (3801) : (26) 파일이 암호화되었거나 데이터베이스가 아닙니다.

  • 08-30 10 : 58 : 35.692 : E / DefaultDatabaseErrorHandler (3801) : sqlite가 데이터베이스에서보고 한 손상 : /data/data/com.padra_tech.karamad/databases/PrimaryInformation

  • 08-30 10 : 58 : 35.692 : E / DefaultDatabaseErrorHandler (3801) :! @ .back 파일 만들기

그리고 이것은 내 수업입니다.

package dataBases;


public class BackupHelper {

public static int SECURITY_NONE = 1 ;
public static int SECURITY_ENCRYPTED = 2 ;

public static void backup(Context context, int securityMode) {
    
    File backup = new File(Environment.getExternalStorageDirectory()+ 
            "/" + "KarAmad" + "/" + "backup");
    backup.mkdirs();
    
    List<File> src = new ArrayList<File>();
    List<File> dst = new ArrayList<File>();
    
    
    try {
        src.add( new File(new PrimaryInformationDataBase(context).getDirectory()) );
        dst.add( new File(backup.getPath() + "/" + "PI") );
        
        src.add( new File(new TransactionDataBase(context).getDirectory()) );
        dst.add( new File(backup.getPath() + "/" + "T") );
        
        src.add( new File(new NoteDataBase(context).getDirectory()) );
        dst.add( new File(backup.getPath() + "/" + "N") );
        
        src.add( new File(new PictureDataBase(context).getDirectory()) );
        dst.add( new File(backup.getPath() + "/" + "P") );
        
        for(int i = 0 ; i < src.size() ; i ++) {
            dst.get(i).createNewFile();
            if(securityMode == SECURITY_ENCRYPTED)
                BackupHelper.encrypt(src.get(i), dst.get(i));
            else
                LeftFragment.copy(src.get(i), dst.get(i));
        }
        
        Toast.makeText(context, "پشتیبان گیری انجام شد", Toast.LENGTH_SHORT).show();
        
    } catch (Exception e) {
        
        Toast.makeText(context, "پشتیبان گیری انجام نشد!", Toast.LENGTH_SHORT).show();
        e.printStackTrace();

    }
}

public static void restore(Context context, int securityMode) {
    
    NoteDataBase dummyNoteDataBase = new NoteDataBase(context);
    String temp = dummyNoteDataBase.getDirectory();
    String dataBasesPath = temp.substring(0, temp.lastIndexOf("/"));
    
    File source = new File(Environment.getExternalStorageDirectory()+ 
            "/" + "KarAmad" + "/" + "backup");
    
    List<File> src = new ArrayList<File>();
    List<File> dst = new ArrayList<File>();
    
    try {
        src.add( new File(source.getPath() + "/" + "PI") );
        dst.add( new File(dataBasesPath + "/" + "PrimaryInformation") );
        
        src.add( new File(source.getPath() + "/" + "T") );
        dst.add( new File(dataBasesPath + "/" + "Transaction") );
        
        src.add( new File(source.getPath() + "/" + "N") );
        dst.add( new File(dataBasesPath + "/" + "Note") );
        
        src.add( new File(source.getPath() + "/" + "P") );
        dst.add( new File(dataBasesPath + "/" + "Picture") );
        
        for(int i = 0 ; i < src.size() ; i++) {
            
            dst.get(i).createNewFile();
            
            if(securityMode == SECURITY_ENCRYPTED)
                BackupHelper.decrypt(src.get(i), dst.get(i));
            else
                LeftFragment.copy(src.get(i), dst.get(i));
        }
        
        
        
        Toast.makeText(context, "بازیابی فایل پشتیبان انجام شد", Toast.LENGTH_SHORT).show();
        
    } catch (Exception e) {
        
        Toast.makeText(context, "بازیابی فایل پشتیبان انجام نشد!", Toast.LENGTH_SHORT).show();
        e.printStackTrace();

    }
}

public static void encrypt(File src, File dst) throws IOException,
    NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
    
    FileInputStream inputStream = new FileInputStream(src);
    FileOutputStream outputStream = new FileOutputStream(dst);
    
    SecretKeySpec keySpec = new SecretKeySpec("1393032613930326".getBytes(), "AES");
    
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    
    CipherOutputStream cipherOutputStream = 
            new CipherOutputStream(outputStream, cipher);
    
    int b;
    byte[] d = new byte[8];
    while((b = inputStream.read(d)) > 0) {
        cipherOutputStream.write(d, 0, b);
    }
    
    cipherOutputStream.flush();
    cipherOutputStream.close();
    inputStream.close();
}


public static void decrypt(File src, File dst) throws IOException,
NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {

    FileInputStream inputStream = new FileInputStream(src);
    FileOutputStream outputStream = new FileOutputStream(dst);

    SecretKeySpec keySpec = new SecretKeySpec("1393032613930326".getBytes(), "AES");

    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, keySpec);

    CipherInputStream cipherOutputStream = 
            new CipherInputStream(inputStream, cipher);

    int b;
    byte[] d = new byte[8];
    while((b = inputStream.read(d)) > 0) {
        outputStream.write(d, 0, b);
    }

    outputStream.flush();
    outputStream.close();
    cipherOutputStream.close();

}
}
헨리

decrypt메서드 inputStream는 이름이 잘못된 cipherOutputStream. 따라서 DB를 해독하는 대신 복사본을 만들고 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

AES를 사용한 SQLite 데이터베이스 복호화

분류에서Dev

AES / ECB를 사용한 복호화 된 데이터 크기

분류에서Dev

Django를 사용한 SQLite 3 데이터베이스

분류에서Dev

SQLite 데이터베이스를 암호화하는 방법

분류에서Dev

CryptoJS를 사용한 자바 스크립트의 AES 암호화 / 복호화

분류에서Dev

Android에서 SQLCipher를 사용하여 기존 데이터베이스 암호화 / 복호화

분류에서Dev

csv를 사용한 Android 데이터베이스 초기화

분류에서Dev

SQLite를 사용하는 Android 데이터베이스 오류

분류에서Dev

Android에서 sqlite 데이터베이스를 사용하는 NullpointerException

분류에서Dev

SearchView를 사용하여 SQLite 데이터베이스 검색

분류에서Dev

MySQL CLI를 사용하여 한 데이터베이스에서 다른 데이터베이스로 값 복사

분류에서Dev

MySQL CLI를 사용하여 한 데이터베이스에서 다른 데이터베이스로 값 복사

분류에서Dev

데이터베이스의 Rails 데이터를 사용한 Rails 국제화

분류에서Dev

메모리를 확보하지 않는 암호화 / 복호화를위한 Firebird 데이터베이스 UDF

분류에서Dev

SQLite 이상한 중복 데이터베이스

분류에서Dev

C ++ 한 데이터베이스에서 다른 데이터베이스로 sqlite blob 복사

분류에서Dev

Qt : 개인 / 공개 키를 사용한 데이터 복호화

분류에서Dev

한 데이터베이스에서 다른 데이터베이스로 모든 데이터베이스 사용자를 복사하는 방법

분류에서Dev

SQLITE 데이터베이스를 암호화하고 Windows VCL 애플리케이션에서 FireDac과 함께 사용

분류에서Dev

sqlite swift iOS를 사용하여 sqlite 데이터베이스에 대한 다중 액세스

분류에서Dev

CoreData 뒤에 Sqlite 데이터베이스 복사

분류에서Dev

Android에서 sqlite 데이터베이스 수동 복사

분류에서Dev

PHP를 통한 Sqlite3 덤프 데이터베이스

분류에서Dev

AES 256Bit 복호화를 사용하여 수정 된 암호화 데이터를 복호화 할 수있는 이유

분류에서Dev

swiftyJSON 및 sqlite.swift를 사용하여 json 기반 데이터를 sqlite 데이터베이스에 추가

분류에서Dev

오프라인 SQLite 데이터베이스를 온라인 MySQL 데이터베이스와 동기화

분류에서Dev

SQLite 데이터베이스를 초기화하는 적절한 방법은 무엇입니까?

분류에서Dev

sqlite 데이터베이스의 데이터를 암호화하는 방법은 무엇입니까?

분류에서Dev

sqlite 데이터베이스의 데이터를 암호화하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    AES를 사용한 SQLite 데이터베이스 복호화

  2. 2

    AES / ECB를 사용한 복호화 된 데이터 크기

  3. 3

    Django를 사용한 SQLite 3 데이터베이스

  4. 4

    SQLite 데이터베이스를 암호화하는 방법

  5. 5

    CryptoJS를 사용한 자바 스크립트의 AES 암호화 / 복호화

  6. 6

    Android에서 SQLCipher를 사용하여 기존 데이터베이스 암호화 / 복호화

  7. 7

    csv를 사용한 Android 데이터베이스 초기화

  8. 8

    SQLite를 사용하는 Android 데이터베이스 오류

  9. 9

    Android에서 sqlite 데이터베이스를 사용하는 NullpointerException

  10. 10

    SearchView를 사용하여 SQLite 데이터베이스 검색

  11. 11

    MySQL CLI를 사용하여 한 데이터베이스에서 다른 데이터베이스로 값 복사

  12. 12

    MySQL CLI를 사용하여 한 데이터베이스에서 다른 데이터베이스로 값 복사

  13. 13

    데이터베이스의 Rails 데이터를 사용한 Rails 국제화

  14. 14

    메모리를 확보하지 않는 암호화 / 복호화를위한 Firebird 데이터베이스 UDF

  15. 15

    SQLite 이상한 중복 데이터베이스

  16. 16

    C ++ 한 데이터베이스에서 다른 데이터베이스로 sqlite blob 복사

  17. 17

    Qt : 개인 / 공개 키를 사용한 데이터 복호화

  18. 18

    한 데이터베이스에서 다른 데이터베이스로 모든 데이터베이스 사용자를 복사하는 방법

  19. 19

    SQLITE 데이터베이스를 암호화하고 Windows VCL 애플리케이션에서 FireDac과 함께 사용

  20. 20

    sqlite swift iOS를 사용하여 sqlite 데이터베이스에 대한 다중 액세스

  21. 21

    CoreData 뒤에 Sqlite 데이터베이스 복사

  22. 22

    Android에서 sqlite 데이터베이스 수동 복사

  23. 23

    PHP를 통한 Sqlite3 덤프 데이터베이스

  24. 24

    AES 256Bit 복호화를 사용하여 수정 된 암호화 데이터를 복호화 할 수있는 이유

  25. 25

    swiftyJSON 및 sqlite.swift를 사용하여 json 기반 데이터를 sqlite 데이터베이스에 추가

  26. 26

    오프라인 SQLite 데이터베이스를 온라인 MySQL 데이터베이스와 동기화

  27. 27

    SQLite 데이터베이스를 초기화하는 적절한 방법은 무엇입니까?

  28. 28

    sqlite 데이터베이스의 데이터를 암호화하는 방법은 무엇입니까?

  29. 29

    sqlite 데이터베이스의 데이터를 암호화하는 방법은 무엇입니까?

뜨겁다태그

보관