在Android中实现SQLite数据库的加密,可以使用第三方库,如SQLCipher
- 添加依赖项:
在项目的build.gradle文件中添加以下依赖项:
dependencies { implementation 'net.zetetic:android-database-sqlcipher:4.4.3' }
注意:请确保将版本号替换为最新的SQLCipher版本。
- 初始化SQLCipher:
在应用程序的Application类中初始化SQLCipher。如果没有Application类,请创建一个并在AndroidManifest.xml中指定它。
import android.app.Application; import net.sqlcipher.database.SQLiteDatabase; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); SQLiteDatabase.loadLibs(this); } }
- 创建加密的数据库:
要创建加密的数据库,需要提供一个密码。在以下示例中,我们将密码存储在一个字符串常量中。请确保将其替换为一个安全的密码。
import android.content.Context; import net.sqlcipher.database.SQLiteDatabase; import net.sqlcipher.database.SQLiteOpenHelper; public class EncryptedDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "encrypted_db"; private static final int DATABASE_VERSION = 1; private static final String PASSWORD = "your_secure_password"; // 请使用一个安全的密码 public EncryptedDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建表和其他数据库结构 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 处理数据库升级 } @Override protected void onConfigure(SQLiteDatabase db) { super.onConfigure(db); db.execSQL("PRAGMA key = '" + PASSWORD + "'"); // 设置数据库密码 } }
- 使用加密的数据库:
现在可以像使用普通的SQLite数据库一样使用加密的数据库。以下是一个简单的示例,展示了如何插入和查询数据。
import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import net.sqlcipher.database.SQLiteDatabase; public class DatabaseManager { private EncryptedDatabaseHelper dbHelper; public DatabaseManager(Context context) { dbHelper = new EncryptedDatabaseHelper(context); } public void insertData(String name, int age) { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("age", age); db.insert("users", null, values); db.close(); } public Cursor getAllData() { SQLiteDatabase db = dbHelper.getReadableDatabase(); return db.query("users", new String[]{"_id", "name", "age"}, null, null, null, null, null); } }
这样,您就可以在Android中实现SQLite数据库的加密了。请确保始终使用安全的密码,并在不再需要时清除密码。