آموزش SQLCipher در اندروید
سلام دوستات عزیز در این سری از آموزش برنامه نویسی اندروید به آموزش SQLCipher در اندروید می پردازیم از SQLCipher به منظور رمزگذاری بروی دیتابیس Sqlite استفاده می شود با استفاده از کتاب خانه SQLCipher به راحتی می توانیم دیتابیس Sqlite را ایمن کنیم و اگر اپلیکیشن یا برنامه ما Decompile یا کرک شد و دارای دیتابیس Sqlite بود به راحتی دیتابیس شما در دسترس بقیه قرار نگیرید در ادامه با ما همراه باشید تا دیتابیس Sqlite خودتان را ایمن و امنیت آن را بالا ببرید.
SQLCipher چیست ؟
یک کتابخانه است که بروی دیتابیس Sqlite رمزگذاری می کند و هنگامی که کاربر آن دیتابیس رو مورد استفاده قرار دهید لازم است رمز مربوط به آن دیتابیس را وارد کند.
برای استفاده از این کتابخانه ابتدا باید آن را به پروژه خود اضافه کنید.
وارد فایل Build.gradle از نوع Module شده سپس در بخش dependencies خط زیر را قرار دهید.
1 | compile 'net.zetetic:android-database-sqlcipher:3.5.9@aar' |
پروژه را sync کنید قند شکن فراموش نشود.
بعد از اینکار باید کتاب خانه را در پروژه لود کنید و در نظر داشته باشید نباید این کلاس android.database.sqlite.SQLiteDatabase را import کنید بلکه باید کلاس net.sqlcipher.database.SQLiteDatabase را import کنید.
برای اینکه کتابخانه را لود کرده و یک دیتابیس بسازید که همراه با پسورد باشد از کد زیر استفاده کنید.
1 2 3 4 5 6 7 8 9 10 | private void InitializeSQLCipher() { SQLiteDatabase.loadLibs(this); File databaseFile = getDatabasePath("demo.db"); databaseFile.mkdirs(); databaseFile.delete(); SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, "your_password", null); database.execSQL("create table t1(a, b)"); database.execSQL("insert into t1(a, b) values(?, ?)", new Object[]{"one for the money", "two for the show"}); } |
در بالا یک دیتابیس همراه با پسورد your_password ساختیم شما می توانید آن را تغییر دهید برای Insert کردن در آن هم یک کد نوشته شده است.
در بالا یک چدول به نام t1 همراه با دو فیلد a,b ساخته شده است زیر همان کد عمل insert نیز انجام شده است.
برای تست دیتابیس بالا می توانید بعد از اجرا فایل .db آن را برداشته و در db browser تست کنید که باز نمی شود البته باز می شود ولی از شما پسورد می خواهد.
کد کامل HelloSQLCipherActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package ir.programchi.demo.sqlcipher; import java.io.File; import net.sqlcipher.database.SQLiteDatabase; import android.app.Activity; import android.os.Bundle; public class HelloSQLCipherActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); InitializeSQLCipher(); } private void InitializeSQLCipher() { SQLiteDatabase.loadLibs(this); File databaseFile = getDatabasePath("demo.db"); databaseFile.mkdirs(); databaseFile.delete(); SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, "test123", null); database.execSQL("create table t1(a, b)"); database.execSQL("insert into t1(a, b) values(?, ?)", new Object[]{"one for the money", "two for the show"}); } } |
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
سلام وقتی برنامه اجرا می شود که نیازی به وارد کردن این رمز نیست درسته؟
سلام بله نیازی به وارد کردن رمز نیست در ابتدای کار رمز بروی فایل گذاشته می شود و برنامه می تواند از آن استفاده کند ولی برنامه های دیگر خیر.
موفق باشید.
سلام برای دیتابیس آماده باید چه کار کنیم؟
تفاوت چندانی ندارد.
سلام وقت بخیر
قبلا در تابع super میشد محل دیتابیس رو هم تعیین کرد بدین صورت
super(context, DATABASE_NAME ,db_patch,null, DATABASE_VERSION);
اما الان چرا در sqlcipher به هیچ وجه نمیشه این db_patch رو قرار داد.
super(context, db_name,null, db_version);