ورود

View Full Version : امنیت دیتابیس در اندروید طوری که کسی از اطلاعاتش استفاده نکنه



android69
پنج شنبه 01 اسفند 1392, 20:06 عصر
چطوری میشه دیابیس رو محافظت کرد؟راهی وجود داره؟ کسی نتونه اطلاعاتش رو استفاده کنه؟:ناراحت::ناراحت::ناراحت: :ناراحت:

perkas
پنج شنبه 01 اسفند 1392, 20:26 عصر
چطوری میشه دیابیس رو محافظت کرد؟راهی وجود داره؟ کسی نتونه اطلاعاتش رو استفاده کنه؟:ناراحت::ناراحت::ناراحت: :ناراحت:

باید اطلاعات رو کد کنی بعد بفرستی به دیتابیس
بعد برای فراخوانی از دیتا بیس عکس این روند یعنی از حالت کد به رشته


فقط مواظب باش از کدهای یک طرفه مثل md5 ( که فقط برای پسورد استفاده میشه ) استفاده نکنی
و سالتش کنی ( حروف - اعداد و سیمبل بصورت تصارفی در کارکتر های خاصی جای بدی ) تا با استفاده از نرم افزارهایی که کد میدی و رشته تحویل میگیری قابل بازگردانی نباشه

اگه میخوای در این مورد اطلاعات کسب کنی درکش مستقیما تو جاوا و اندروید ممکنه سخت باشه
پیشنهاد من اینه که اول این کار رو با یه زبان برنامه نویسی دیگه ( ترجیحا خانواده c ) یاد بگیری بعد بیای تو اندروید پیاده سازی کنی
مطالبی که باید سرچ کنی : salt-encript-decript و هر موضوعی که در مورد کار با رشته ها باشه

mohsen22
پنج شنبه 01 اسفند 1392, 21:30 عصر
ممنون ... سایر اساتید هم در فهم بشتر کمک می کنند؟:لبخندساده:

abbasalim
پنج شنبه 01 اسفند 1392, 22:12 عصر
قبل از سوال جدید بهتره یه سرچ داخل انجمن بکنی قبلا کلی آدم این سوال رو پرسیدن

android69
پنج شنبه 01 اسفند 1392, 23:30 عصر
قبل از سوال جدید بهتره یه سرچ داخل انجمن بکنی قبلا کلی آدم این سوال رو پرسیدن

سرچ کردم چیزی یافت نشد میفهمیم این چیزارو آقای محترم

saeed_g21
جمعه 02 اسفند 1392, 00:17 صبح
اینم یک نمونه کد


import java.io.IOException; import java.util.Date; import java.util.Random; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Main { private static Random rand = new Random((new Date()).getTime()); public static void main(String[] args) throws Exception { String st = "secrete"; String enc = encrypt(st); System.out.println("Encrypted string :" + enc); System.out.println("Decrypted string :" + decrypt(enc)); } public static String encrypt(String str) { BASE64Encoder encoder = new BASE64Encoder(); byte[] salt = new byte[8]; rand.nextBytes(salt); return encoder.encode(salt) + encoder.encode(str.getBytes()); } public static String decrypt(String encstr) { if (encstr.length() > 12) { String cipher = encstr.substring(12); BASE64Decoder decoder = new BASE64Decoder(); try { return new String(decoder.decodeBuffer(cipher)); } catch (IOException e) { // throw new InvalidImplementationException( //Fail } } return null; } }


اینم خروجی کد

Encrypted string :CT6/c+0AAmU=c2VjcmV0ZQ== Decrypted string :secrete

jafaripur
جمعه 02 اسفند 1392, 00:28 صبح
اطلاعات خودت رو رمز کن. حالا می تونه هر الگوریتمی باشه، این خود مشکلات دیگری به وجود میاره که بداً کار کنی متوجه می شی.

saeed_g21
جمعه 02 اسفند 1392, 00:45 صبح
اطلاعات خودت رو رمز کن. حالا می تونه هر الگوریتمی باشه، این خود مشکلات دیگری به وجود میاره که بداً کار کنی متوجه می شی.
بله منم موافقم
اگه از دیتابیس آماده استفاده نمیکنی یک کاری دیگه میشه کرد
وقتی دستگاه رووت نیست نمیشه به دیتابیس برنامه دست پیدا کرد ولی اگر رووت باشه خیلی راحت با 2 - 3 تا کلیک میشه دیتابیس رو در اختیار گرفت اگه اطلاعاتت خیلی خیلی مهمه و نمی خوای کش برن چک کن ببین اگه دستگاه روت نیست برنامه به خوبی کار کنه ولی اگه رووت است دیتابیس رو پاک کنه و حتی از اجرای برنامه جلوگیری کنه

mohsen22
جمعه 02 اسفند 1392, 08:44 صبح
اینم یک نمونه کد


import java.io.IOException; import java.util.Date; import java.util.Random; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Main { private static Random rand = new Random((new Date()).getTime()); public static void main(String[] args) throws Exception { String st = "secrete"; String enc = encrypt(st); System.out.println("Encrypted string :" + enc); System.out.println("Decrypted string :" + decrypt(enc)); } public static String encrypt(String str) { BASE64Encoder encoder = new BASE64Encoder(); byte[] salt = new byte[8]; rand.nextBytes(salt); return encoder.encode(salt) + encoder.encode(str.getBytes()); } public static String decrypt(String encstr) { if (encstr.length() > 12) { String cipher = encstr.substring(12); BASE64Decoder decoder = new BASE64Decoder(); try { return new String(decoder.decodeBuffer(cipher)); } catch (IOException e) { // throw new InvalidImplementationException( //Fail } } return null; } }


اینم خروجی کد

Encrypted string :CT6/c+0AAmU=c2VjcmV0ZQ== Decrypted string :secrete



سعید جان ممکنه بیشتر در مورد این کد توضیح بدید ؟مرسی

saeed_g21
جمعه 02 اسفند 1392, 22:05 عصر
محسن جان کد ساده و مشخصه کجاش رو توضیح بدم ؟

smemamian
جمعه 02 اسفند 1392, 23:16 عصر
اگه خیلی حرفه ای نیستید هیچ وقت خودتون دیتابیس رو به رمز تبدیل نکنید !!! (نوشته ی من توهین نبود.. بحث امنیت و مشکلاتی که در آینده با اون مواجه می شوید هستش.)

از SQLCipher (http://sqlcipher.net/about/)استفاده کنید.
آموزش. (http://sqlcipher.net/sqlcipher-for-android/)
نکته قابل توجه:
secure 256-bit AES encryption