آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

روش امنیت رشته های String چیست؟ (حل شد)

jbRhmNqb  9 سال پیش  9 سال پیش
+4 0

سلام
برای امن کردن یک رشته استرینگ داخل برنامه روشی سراغ دارین؟
دسترسی به این رشته ها خیلی آسونه، من چندتا رمز و پسورد و لینک وبسایت داخل برنامم هست که نمیخوام کسی بهش دسترسی داشته باشه!

یه روش به ذهنم رسیده اینکه یه TextView به حالت View.GONE بذارم و تکست رو همون لینکی که نیاز دارم بذارم و هر وقت بهش نیاز داشتم getText کنم!
این منطقیه؟ جواب میده؟!

 برای این سوال 8 پاسخ وجود دارد.
پاسخ به سوال 
Soheil  9 سال پیش
+3 0

سلام . میتونید به این تابع رشته خودوتون پاس بدین تا براتون به اصطلاح هش کنه !

    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);
    }
0 0
خب اون هش رو چجوری به استرینگ تبدیل کنم که قابل استفاده باشه؟ (9 سال پیش)
پاسخ به سوال 
jbRhmNqb  9 سال پیش
0 0

این لایبرری چطوره به نظرتون؟!
https://github.com/scottyab/AESCrypt-Android

+1 0
ب نظر من کسی ک برنامه رو دیکامپایل کنه در اخر سر میتونه الگوی رمز نگاری شما رو بیرون بکشه. برای بحث امنیت روش حساب بار نکنید و برای امنیت اطلاعات بهتره از سمت خود سرور کمک بگیرید. (9 سال پیش)
+1 0
خب برای ارتباط با سرور هم باید یه استرینگ داخل برنامه باشه دیگه! امنیت همونو چجوری بیشتر کنم؟! (9 سال پیش)
پاسخ به سوال 
Soheil  9 سال پیش
+1 0

مثال میزنم: فرض کنید داخل برنامتون لینک ب ی سایتی وجود داره و شما نمیحواید اون لینگ کسی جز کاربرر داخل گوشی بتونه ازش استفاده کنه.خب سمت سرور مثلادمیتونین در خواست های Get یا post در ادرس حودتون داشته باشید و چک میگنید ک اگر این مقادیر قبلا داخل دیتابیس سرورتون ذخیره شده بود ب اون در خواست جواب بده در غیر این صورت خیر.

+1 0
مقادیر get و post که به لینکه میچسبه بلاخره یه جایی از برنامه به صورت استرینگ وجود داره... حالا یه BasicNameValuePair یا StringArray یا هرچیز دیگه خب اینا که بازم قابل دسترسی هست... (9 سال پیش)
+1 0
درسته. برای این موارد باید یا از ip اختصاصی استفاده کنید که فقط همون گوشی بتونه استفاده کنه و اونها را داخل دیتابیس ذخیره کنید یا از shared prefs ها استفاده کنید . که البته امنیت روش اول بسیار بالاتره. (9 سال پیش)
پاسخ به سوال 
jbRhmNqb  9 سال پیش
0 0

لطفا راهنمایی کنید برام مهمه...
راهنمایی های دوستان رو استفاده کردم اما فایده نداره
غیر از موارد بالا روش دیگه ای هست که استرینگ امن داشته باشم؟
یکی از روش ها این بود که استرینگ رو هش کنم:
اگه هش کنم نمیدونم چطوری برش گردونم به حالت اول!
یکی از روش ها استفاده از ip بود که اونم فایده نداره چون اون ip باز هم reverse میشه و نمایش داده میشه
استفاده از فایل فرمت اختصاصی هم فایده نداره چون موقع reverse باز هم نشون میده که چه نوع داده ای داخلش ذخیره شده!

+1 0
من نظرم روی فایل فرمت اختصاصی هست ، با یک فرمول پیچیده و بسیار طولانی ، در یک کلاس جدا که مطمئن بشیم اون کلاس کاملا obfuscate شده . در این صورت چطور میشه reverse بشه وقتی obfuscate شده ؟! (9 سال پیش)
+1 0
خیلی ممنون آقا رضا، فایل فرمت اختصاصی جواب داد! من مشکلم این بود که یه کلاس جدا براش نمیساختم اینجوری خوب obfuscate نمیشد... (9 سال پیش)
0 0
اگه امکانش هست درباره ی این روش بیشتر توضیح بدید تا ما هم بتونیم استفاده کنیم ممنون (9 سال پیش)
پاسخ به سوال 
Amir  9 سال پیش
+2 0

                     

+1 0
منظورتون از "وقتی مثلا متد getPassword رو صدا میزنید یه سری پارامتر ها رو هم بگیرید که مخصوص برنامه ی خودتونه" چیه ؟ میشه بیشتر توضیح بدین ؟ (9 سال پیش)
+1 0
به نظرم فایل فورمت اختصاصی بهترین راهه(به شرط ساختن یک کلاس جداگانه که از هیچی اکستندز نشده) چون اصلا نمیدونم sha1 رو چجوری استفاده کنم و اینا... ولی خب اگه فکر میکنین راه شما بهتره و براتون مقدور هست یه نمونه کد بذارین تا بهتر متوجه بشیم و ازین به بعد از همون استفاده کنیم. (9 سال پیش)
+1 0
روش بالا رو که امتحان کردم، با چند روش میشه دورش زد و String رو بدست آورد. به همین خاطر پاکش می کنم. تا الآن که بهترین روش همون فایل فرمت های اختصاصیه. (9 سال پیش)
پاسخ به سوال 
jbRhmNqb  9 سال پیش
+2 0

برای شروع باید طبق مبحث فایل فرمت اختصاصی یک فایل درست کنید و داخلش چندتا متغیر قرار بدین که فقط برای شلوغ شدن فایل بشه و بعد از اونها هم اون استرینگ که میخواین بهش دسترسی داشته باشین قرار بدین
حالا فایل ساخته شده روی حافظه امولاتور رو کپی کنید به پوشه assets در خود پروژه اصلیتون...
توی پروژه هم یک کلاس بسازید برای خوندن از فایل داخل assets به این صورت که اول از داخل assets به sd-card کپی کنید و بعد هم یکی یکی متغیر ها رو از فایل بخونین و اون متغیری که میخواین ذخیره کنین و ازش استفاده کنین.
من چون متغیری که میخواستم ذخیره کنم از جنس int بود توی فایل فرمت اختصاصی نمایش داده نمیشه ولی اگه از جنس string باشه باز هم نمایش داده میشه برای همین بهتره قبل از اینکه فایل فورمت اختصاصی رو بسازین اون استرینگ رو به چند قسمت تقسیم کنید و توی قسمت های مختلف فایل به صورت پراکنده قرار بدین و بعد که دارین از روش میخونین به ترتیب بخونین و به هم بچسبونین تا string  اصلی ساخته بشه البته این راهی بود که به ذهن من رسید شاید راه بهتری هم باشه برای ذخیره string  که من خبر ندارم...

پاسخ به سوال 
Reza  9 سال پیش
+2 0

    من خودم نیاز به این دارم که آدرس سرور رو مخفی کنم ، و دنبال بهترین روش هستم و فکر میکنم فایل فرمت روش خوبیه به شرطی که به 2 نکته توجه بشه:

1 -    نباید از اون کلاس فرعی جدا ، مقدار برگشتی داشته باشیم به کلاس اصلی . پس باید یه متد static و طولانی ( بدون خروجی ) مربوط به کلاس فرعی رو صدا بزنیم که همه کارها رو همونجا انجام بده ( محاسبه آدرس و ارسال مقادیر و دریافت مقادیر و ست کردن مقادیر دریافت شده به کنترل های روی صفحه و ... ) . و obfuscate کردن کامل اون کلاس فرعی .

2 -    همونطور که آقا رحمان گفتن یک سری داده برای شلوغ شدن فایل ذخیره بشه ، ولی استرینگ مد نظر یکجا ذخیره نشه ، چون با سعی و خطا میشه اونو بدست آورد ، به این صورت که مثلا طرف میاد فایل رو برمیداره و در پروژه خودش اول میگه یک int بده ، میبینه کرش میکنه بعد میگه float بده باز کرش میکنه ، بعد میگه boolean بده و میبینه مقدار برمیگرده ، پس میفهمه اولین داده ذخیره شده یک boolean هست . حالا میره سراغ داده دوم و باز با سعی و خطا اونم بدست میاره . همینطور میره جلو تا یهو میرسه به یک داده ای که میبینه String هست و اگه شما همشو یکجا ذخیره کرده باشی ، خب همشو بدست میاره ( ممکنه از اعداد چیزی نفهمه که چیه و کجا استفاده شدن ولی اگه یک String مثل آدرس سایت یکجا ذخیره شده باشه ، خب معلوم میشه آدرس یک سایت هست ) پس بهتره همونطور که گفتین استرینگ اگه مثلا آدرس سایت هست ، تکه تکه بشه ( یا حتی حرف به حرف بشه ) و در جاهای مختلف قرار بگیره ، و بعد موقع خوندن به همون ترتیبی که خودمون میدونیم تکه ها رو به هم بچسبونیم . کد هم که obfuscate  شده و الگوریتم و ترتیب ذخیره داده ها و بازخوانی داده ها معلوم نیست .

 

    لطفا اگه کسی اشکالی در این روش میبینه یا راه بهتری سراغ داره بگه .

0 0
من توی کلاس فرعیم یه متد نان استاتیک دارم که هروقت لازمش داشته باشم ی نمونه کلاس میسازم و اون متد رو با یه \ارامتر ورودی صدا میزنم تا بر اساس کدی که براش فرستادم بره از روی فایل فرمت اختصاصی یه مقدار خاص رو بخونه و بهم برگردونه... این قضیه توی obfuscate شدن مشکلی ایجاد میکنه؟! (9 سال پیش)
+1 0
نمیدونم در obfuscate شدن تاثیری داره یا نه ، ولی اگه قرار باشه مقدار خاص رو بخونید و برگردونید که بی فایده ست . درسته که کدهای کلاس فرعی obfuscate شده ولی شما در کلاس اصلی ممکنه قسمت صدا زدن متد ، obfuscate نشده باشه و معلوم میشه که کجا متد صدا زده شده و چون خروجی داره میشه بدستش آورد . البته من هنوز تجربه این کارا رو نداشتم ولی چون تازه میخوام کارای سرور رو شروع کنم فقط بهش فکر کردم . (9 سال پیش)
+1 0
من امتحان کردم وسط کدها دیده نمیشد که متد رو کجا صدا زدم... شایدم حواسم نبوده؛ حالا تا چند روز آینده دوباره بررسی میکنم ببینم چطوری میشه... اگه دیده بشه باید همون استاتیک بسازم دوباره ببینم بعد از obfuscate شدن میشه پیداش کرد یا نه! (9 سال پیش)
پاسخ به سوال 
khanbeiki  9 سال پیش
+2 0

یک ابزاری وجود دارد که تمام url هایی که میخواهید از برنامه شما خارج بشه و درخاست بزنه رو درمیاره - درواقع امنیت و رمز نگاری و پیچوندن string ها معنی ندارد - بهتره از Token استفاده کنید.

0 0
توکن چجوریه لطفاً بیشتر توضیح بدین... و یه سوال دیگه در مورد اون برنامه اینکه اگر همراه url از طریق post method پارامتری ارسال بشه بازم دیده میشه؟! (9 سال پیش)
+2 0
دوست عزیز هرکار کنید با یه اسنیف ساده لینک ها نمایان می شن البته https امنیت را بالا میبرد لینک شما باید سمت سرور امنیت رو تامین کنید که حتی در صورت داشتن لینک شما کاری نتونه بکنه (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .