`
iaiai
  • 浏览: 2204183 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQLCipher android 数据库加密

 
阅读更多
项目中引入了SQLCipher之后,会让你的程序体积骤然增加,打成APK后大概会变大好几M,是更侧重于文件大小,还是更侧重于程序安全,你应该根据具体的需求做出合适的判断。

manifest 配置写入文件权限 因为copy的数据库文件到创建的目录下
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


module 下的build.gradle
compile 'net.zetetic:android-database-sqlcipher:3.5.3@aar'


application 或者你当前所用到的activity 首先要加上这句话
SQLiteDatabase.loadLibs(this);


创建一个MyDatabaseHelper
public class MyDatabaseHelper extends SQLiteOpenHelper {       
    public static final String CREATE_TABLE = "create table Book(name text, pages integer)";    
    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }      
    @Override      
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE);
    }      
    @Override     
    public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
    }
}


关键代码 activity
public class MainActivity extends AppCompatActivity {

    private SQLiteDatabase db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//因为很多手机没有root 过 所以你没办法去找到你的db文件 并且copy出来查看 这时候需要手动去创建目录    
       createSdcardFolder();
        setContentView(R.layout.main);
        SQLiteDatabase.loadLibs(this);
        MyDatabaseHelper dbHelper = new MyDatabaseHelper(this, "cipher.db", null, 1);
        db = dbHelper.getWritableDatabase("secret_key");
        Button addData = (Button) findViewById(R.id.add_data);
        Button queryData = (Button) findViewById(R.id.query_data);
        addData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ContentValues values = new ContentValues();
                values.put("name", "达芬奇密码");
                values.put("pages", 566);
                db.insert("Book", null, values);
            }
        });
        queryData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Cursor cursor = db.query("Book", null, null, null, null, null, null);
                if (cursor != null) {
                    while (cursor.moveToNext()) {
                        String name = cursor.getString(cursor.getColumnIndex("name"));
                        int pages = cursor.getInt(cursor.getColumnIndex("pages"));
                        Log.d("TAG", "book name is " + name);
                        Log.d("TAG", "book pages is " + pages);
                    }
                }
                cursor.close();
            }
        });
//copy出数据库文件
    copyfile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                copyDatabaseToSdcard(MainActivity.this);
            }
        });
    }
  /** * 创建SdcardFolder    */
    public void createSdcardFolder(){
        if(SDCardUtils.isSDCardEnable()){
            File file =null;
            file = new File(String.format("%s%s",SDCardUtils.getSDCardPath(), "/cliper/temp"));
            if(!file.exists()){//判断sdcard卡上是否有目录,没有目录则生成目录
                file.mkdirs();
            }
        }
    }
/** * 复制数据库文件 */
   public static void copyDatabaseToSdcard(Context context){
        copyDatabaseToSdcard(context,"dbfile");
    }
/** * 复制数据库文件 */
public static void copyDatabaseToSdcard(Context context,String name){
        try {
            File file = context.getDatabasePath("cipher.db");
            FileUtil.writeFile(new FileInputStream(file.getAbsolutePath()), SDCardUtils.getSDCardPath()
                    +"/cipher/temp" + "/"+name);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


数据库加密之后 用工具无法打开。这就足以说明,目前数据库中的数据是非常安全的,只有在应用程序里通过SQLCipher提供的API才可以访问到数据库里的数据,使用其它的方式都无法获取其数据。


创建目录
/**
   * 创建SdcardFolder
   */

     public void createSdcardFolder(){
      if(SDCardUtils.isSDCardEnable()){
          File file =null;
          file = new File(String.format("%s%s",SDCardUtils.getSDCardPath(), "/cipher/temp"));
          if(!file.exists()){
              file.mkdirs();
          }
      }
  }


SDCardUtils
public static String getSDCardPath(){
   return Environment.getExternalStorageDirectory().toString();
  }


FileUtil
public final static void writeFile(InputStream input, String fileName) throws IOException {
      writeFile(input, new FileOutputStream(fileName));
  }
public final static void writeFile(InputStream input, OutputStream os) throws IOException
{  
     byte[] bs = new byte[1024];  // 设置数据缓冲  
      int len;   // 读取到的数据长度 
      while ((len = input.read(bs)) != -1) {   
     os.write(bs, 0, len);   }  
     os.close();  
     input.close();
}


我自己经历的错误 :
1.你首先要确信 你的手机里 没有你现在建好的db 文件 否则它会告诉你不能加密此文件 :


2.我在as里 使用了 eclipse 配置的方法 却没有在build.gradle文件里做配置 eclipse的配置这些so 文件 jar包 zip 文件 都要有
sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java']
            res.srcDirs = ['src/main/res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }
    }



  • 大小: 26 KB
  • 大小: 46.4 KB
  • 大小: 11.6 KB
分享到:
评论

相关推荐

    sqlcipher实现数据库加密解密

    使用sqlcipher实现数据库加密解密,内附详细总结文档

    android sqlcipher给数据库文件加密

    SQLCipher就是一款专为SQLite数据库提供加密功能的开源库,适用于Android和其他平台。本文将深入探讨如何在Android项目中使用SQLCipher来加密数据库文件。 首先,了解SQLCipher的基本原理。SQLCipher基于SQLite,它...

    sqlcipher加密数据库查看器

    SQLCipher 是一个开源的 SQL 数据库加密解决方案,它为 SQLite 数据库提供了透明的加密功能。在 Android 开发中,数据安全是至关重要的,SQLCipher 提供了一种方法来保护应用程序存储在数据库中的敏感信息,如用户...

    sqlcipher3.0.1 Android数据库解密工具 for Win

    提供的"sqlcipher3.0.1 Android数据库解密工具 for Win"可能包含以下部分: - **readme.txt**:一般会包含使用工具的说明和步骤,如如何导入数据库文件,如何输入解密密钥等。 - **bin**:这个目录可能包含可执行...

    利用Frida实现wcdb和sqlcipher数据库加密获取秘钥

    sqlcipher:https://github.com/sqlcipher/android-database-sqlcipher js脚本 Java.perform(function () { //wcdb try { const SQLiteConnection = Java.use('com.tencent.wcdb.database.SQLiteConnect

    sqlite加密 android数据库加密

    ormlite框架整合sqlcipher数据库加密实例,注意调配编译版本

    SQLCipher数据库加密源码和案例_学习步骤

    SQLCipher是一个开源的SQLite数据库加密扩展,它提供了对SQLite数据库进行透明加密的能力,确保数据在存储和传输过程中的安全性。本教程将深入讲解SQLCipher的使用,以及如何在Android项目中集成和应用SQLCipher来...

    android-database-sqlcipher-v3.5.7 Android安卓数据库加密开源项目

    《Android数据库安全:SqlCipher深度解析》 在移动设备中,数据安全是至关重要的,尤其是在Android平台上,由于其开放性,应用程序的数据面临着更多的潜在风险。为了解决这一问题,许多开发者选择使用加密技术来...

    SQLCipher为sqlite数据库设置密码

    SQLCipher是一款开源的数据库加密工具,它为SQLite数据库提供透明的数据加密功能,确保在存储和检索数据时的数据安全。SQLite是广泛应用于移动设备和嵌入式系统的轻量级数据库,而SQLCipher则增强了其安全性,使得...

    android 的sqlite数据库加密实现

    在Android应用开发中,SQLite是一个...通过以上介绍,我们了解了在Android中使用SQLCipher实现SQLite数据库加密的重要性、方法以及注意事项。在实际项目中,可以根据需求选择适合的加密策略,确保应用的数据安全性。

    sqlcipher数据库加密加载包

    sqlcipher数据库加密加载包,用于安卓sqlite数据库加密,采用的是数据库整体加密

    Android 数据库加密

    在Android开发中,数据存储是不可或缺的一部分,而随着对数据安全性的重视日益增强,数据库加密成为了一项重要的技术。SQLite是Android系统默认的轻量级数据库,它为开发者提供了便捷的数据存储方式。然而,SQLite...

    sqlcipher3.exe sqlcipher4.exe加密数据库可以打开

    在实际应用中,使用Sqlite Cipher进行数据库加密的好处包括: 1. 数据隐私:通过加密,即使数据库文件被非法获取,没有正确的密码也无法读取其中的内容。 2. 应用合规性:对于处理敏感数据的应用,如金融或医疗应用...

    android 数据库加密

    在Android开发中,数据存储是不可或缺的一部分,而SQLite作为Android内置的关系型数据库,被广泛...通过学习和实践这个案例,开发者可以掌握在Android环境中实现数据库加密的方法,为用户提供更安全的数据存储环境。

    Android数据库安全解决方案,使用SQLCipher Demo

    总之,SQLCipher为Android应用提供了数据库加密的功能,帮助开发者在保护用户数据安全的同时,仍能享受SQLite带来的便利。通过上述的步骤和最佳实践,可以有效地在应用中集成并使用SQLCipher,为Android数据库安全...

    SQLCipherDemo 代码实现SQLCipher对数据库文件的加密

    本文将深入探讨如何使用SQLCipher来加密数据库文件,并通过实际的代码示例展示如何进行数据库的增删改查操作。 首先,SQLCipher的基本原理是通过在SQLite的API层添加一层加密,使得数据库文件在磁盘上以密文形式...

    使用Sqlcipher对sqlite数据库进行加解密

    在Android开发中,由于sqlite是默认的数据存储方式,但原始的sqlite数据库并不具备安全的加密机制,因此Sqlcipher的引入可以有效保护用户数据的安全,防止未授权访问。本文将详细介绍如何在Android应用中使用...

    SafeRoomDemo:使用SQLCipher对Room的数据库进行加密

    SQLCipher是一款开源的SQL数据库加密库,它提供了透明的数据库加密功能,允许开发者在不修改原有SQL语句的情况下,实现数据库的加密。在`SafeRoomDemo`中,我们将看到如何集成SQLCipher到Room数据库,以及如何进行...

    SqlCipher.exe Sqlite加密查看工具

    SqlCipher.exe是一款针对Sqlite数据库的加密查看工具,专为Windows操作系统设计。Sqlite是一款轻量级、自包含的数据库引擎,广泛应用于各种桌面和移动应用程序。然而,数据安全是任何应用的重要考量,SqlCipher正是...

    SQLCipher加密数据库

    SQLCipher是一种针对SQLite数据库的开源加密库,它允许开发者对SQLite数据库进行透明的加密操作,以保护存储在其中的敏感数据。SQLCipher的使用既简单又高效,但正如描述中提到的,它可能会使应用程序(APK)文件的...

Global site tag (gtag.js) - Google Analytics