روش امنیت رشته های String چیست؟ (حل شد)
سلام
برای امن کردن یک رشته استرینگ داخل برنامه روشی سراغ دارین؟
دسترسی به این رشته ها خیلی آسونه، من چندتا رمز و پسورد و لینک وبسایت داخل برنامم هست که نمیخوام کسی بهش دسترسی داشته باشه!
یه روش به ذهنم رسیده اینکه یه TextView به حالت View.GONE بذارم و تکست رو همون لینکی که نیاز دارم بذارم و هر وقت بهش نیاز داشتم getText کنم!
این منطقیه؟ جواب میده؟!
سلام . میتونید به این تابع رشته خودوتون پاس بدین تا براتون به اصطلاح هش کنه !
public static String SHA1(String text) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] textBytes = text.getBytes("iso-8859-1");
md.update(textBytes, 0, textBytes.length);
byte[] sha1hash = md.digest();
return convertToHex(sha1hash);
}
این لایبرری چطوره به نظرتون؟!
https://github.com/scottyab/AESCrypt-Android
مثال میزنم: فرض کنید داخل برنامتون لینک ب ی سایتی وجود داره و شما نمیحواید اون لینگ کسی جز کاربرر داخل گوشی بتونه ازش استفاده کنه.خب سمت سرور مثلادمیتونین در خواست های Get یا post در ادرس حودتون داشته باشید و چک میگنید ک اگر این مقادیر قبلا داخل دیتابیس سرورتون ذخیره شده بود ب اون در خواست جواب بده در غیر این صورت خیر.
لطفا راهنمایی کنید برام مهمه...
راهنمایی های دوستان رو استفاده کردم اما فایده نداره
غیر از موارد بالا روش دیگه ای هست که استرینگ امن داشته باشم؟
یکی از روش ها این بود که استرینگ رو هش کنم:
اگه هش کنم نمیدونم چطوری برش گردونم به حالت اول!
یکی از روش ها استفاده از ip بود که اونم فایده نداره چون اون ip باز هم reverse میشه و نمایش داده میشه
استفاده از فایل فرمت اختصاصی هم فایده نداره چون موقع reverse باز هم نشون میده که چه نوع داده ای داخلش ذخیره شده!
برای شروع باید طبق مبحث فایل فرمت اختصاصی یک فایل درست کنید و داخلش چندتا متغیر قرار بدین که فقط برای شلوغ شدن فایل بشه و بعد از اونها هم اون استرینگ که میخواین بهش دسترسی داشته باشین قرار بدین
حالا فایل ساخته شده روی حافظه امولاتور رو کپی کنید به پوشه assets در خود پروژه اصلیتون...
توی پروژه هم یک کلاس بسازید برای خوندن از فایل داخل assets به این صورت که اول از داخل assets به sd-card کپی کنید و بعد هم یکی یکی متغیر ها رو از فایل بخونین و اون متغیری که میخواین ذخیره کنین و ازش استفاده کنین.
من چون متغیری که میخواستم ذخیره کنم از جنس int بود توی فایل فرمت اختصاصی نمایش داده نمیشه ولی اگه از جنس string باشه باز هم نمایش داده میشه برای همین بهتره قبل از اینکه فایل فورمت اختصاصی رو بسازین اون استرینگ رو به چند قسمت تقسیم کنید و توی قسمت های مختلف فایل به صورت پراکنده قرار بدین و بعد که دارین از روش میخونین به ترتیب بخونین و به هم بچسبونین تا string اصلی ساخته بشه البته این راهی بود که به ذهن من رسید شاید راه بهتری هم باشه برای ذخیره string که من خبر ندارم...
من خودم نیاز به این دارم که آدرس سرور رو مخفی کنم ، و دنبال بهترین روش هستم و فکر میکنم فایل فرمت روش خوبیه به شرطی که به 2 نکته توجه بشه:
1 - نباید از اون کلاس فرعی جدا ، مقدار برگشتی داشته باشیم به کلاس اصلی . پس باید یه متد static و طولانی ( بدون خروجی ) مربوط به کلاس فرعی رو صدا بزنیم که همه کارها رو همونجا انجام بده ( محاسبه آدرس و ارسال مقادیر و دریافت مقادیر و ست کردن مقادیر دریافت شده به کنترل های روی صفحه و ... ) . و obfuscate کردن کامل اون کلاس فرعی .
2 - همونطور که آقا رحمان گفتن یک سری داده برای شلوغ شدن فایل ذخیره بشه ، ولی استرینگ مد نظر یکجا ذخیره نشه ، چون با سعی و خطا میشه اونو بدست آورد ، به این صورت که مثلا طرف میاد فایل رو برمیداره و در پروژه خودش اول میگه یک int بده ، میبینه کرش میکنه بعد میگه float بده باز کرش میکنه ، بعد میگه boolean بده و میبینه مقدار برمیگرده ، پس میفهمه اولین داده ذخیره شده یک boolean هست . حالا میره سراغ داده دوم و باز با سعی و خطا اونم بدست میاره . همینطور میره جلو تا یهو میرسه به یک داده ای که میبینه String هست و اگه شما همشو یکجا ذخیره کرده باشی ، خب همشو بدست میاره ( ممکنه از اعداد چیزی نفهمه که چیه و کجا استفاده شدن ولی اگه یک String مثل آدرس سایت یکجا ذخیره شده باشه ، خب معلوم میشه آدرس یک سایت هست ) پس بهتره همونطور که گفتین استرینگ اگه مثلا آدرس سایت هست ، تکه تکه بشه ( یا حتی حرف به حرف بشه ) و در جاهای مختلف قرار بگیره ، و بعد موقع خوندن به همون ترتیبی که خودمون میدونیم تکه ها رو به هم بچسبونیم . کد هم که obfuscate شده و الگوریتم و ترتیب ذخیره داده ها و بازخوانی داده ها معلوم نیست .
لطفا اگه کسی اشکالی در این روش میبینه یا راه بهتری سراغ داره بگه .
یک ابزاری وجود دارد که تمام url هایی که میخواهید از برنامه شما خارج بشه و درخاست بزنه رو درمیاره - درواقع امنیت و رمز نگاری و پیچوندن string ها معنی ندارد - بهتره از Token استفاده کنید.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .