PDA

View Full Version : سوال: مخفی کردن فایل txt



rezarko
پنج شنبه 23 آذر 1391, 13:26 عصر
سلام. من یه فایل txt کنار برنامم دارم که برنامم یه اطلاعاتی رو از اون میحونه. ولی کاربر به راحتی میتونه این فایل رو باز کنه و اطلاعات برنامم رو بخونه. بهنظر شما چیکار کنم کنم که کاربر نتونه این فایل رو باز کنه؟
باتشکر

keyvan_s89
پنج شنبه 23 آذر 1391, 13:48 عصر
سلام. من یه فایل txt کنار برنامم دارم که برنامم یه اطلاعاتی رو از اون میحونه. ولی کاربر به راحتی میتونه این فایل رو باز کنه و اطلاعات برنامم رو بخونه. بهنظر شما چیکار کنم کنم که کاربر نتونه این فایل رو باز کنه؟
باتشکر
میتونید فایل رو مخفی کنید

FileInfo file;
file = new FileInfo("مسیر فایل");
file.Attributes = FileAttributes.Hidden;برای مخفی کردن
file.Attributes = ~FileAttributes.Hidden;برای نمایش دادن
System.IO رو هم اضافه کنید

rezarko
پنج شنبه 23 آذر 1391, 14:35 عصر
اگه فایل مخفی باشه میشه اطلاعاتشو تو برنامه خوند؟
این روش امنه؟

SHD.NET
پنج شنبه 23 آذر 1391, 14:45 عصر
اگه فایل مخفی باشه میشه اطلاعات رو خوند توی برنامه . روش زیاد امنی هم نیست . چ.ن کاربر فقط کافیه اونو از حالت هیدن درش بیاره . اونوقته که همه چی لو میره :لبخند:

SHD.NET
پنج شنبه 23 آذر 1391, 14:46 عصر
به نظر من اطلاعات رو کد شده باید توی فایل بنویسی و بخونی .
خودم از همین روش استفاده می کردم . اطلاعات رو به صورت AES اینکرایپت می کردم . بعدش هم موقع لود کردن Decrypt می کردمشون

:چشمک:\\\موفق باشید///:چشمک:

مهرداد صفا
پنج شنبه 23 آذر 1391, 14:50 عصر
سلام
میتوانید فایل در resource برنامه قرار داده و به صورت مستقیم از داخل برنامه به آن دسترسی داشته باشید.
در این تاپیک یک مثال میبینید:
http://barnamenevis.org/showthread.php?371541-چطور-با-سی-شارپ-می-شه-صدا-ساخت

SHD.NET
پنج شنبه 23 آذر 1391, 14:52 عصر
من خودم یه برنامه برای کدکردن متن نوشته بودم اما فارسی رو ساپورت نمی کرد که یکی از عزیزان زحمت کشید و درستش کرد . البته به زبان vb.net هستش . بر توی این تاپیک (http://barnamenevis.org/showthread.php?370194-%D9%81%D8%A7%D9%86%DA%A9%D8%B4%D9%86-%DA%A9%D8%AF%DA%A9%D8%B1%D8%AF%D9%86-%D9%85%D8%AA%D9%86-%D8%A8%D9%87-%D8%B1%D9%88%D8%B4-AES)شاید بدردت خورد

:چشمک:\\\موفق باشید///:چشمک:

SHD.NET
پنج شنبه 23 آذر 1391, 14:56 عصر
سلام
میتوانید فایل در resource برنامه قرار داده و به صورت مستقیم از داخل برنامه به آن دسترسی داشته باشید.
در این تاپیک یک مثال میبینید:
http://barnamenevis.org/showthread.php?371541-چطور-با-سی-شارپ-می-شه-صدا-ساخت

این تاپیک که ربطی به ریسورس نداره !! توش درخواست شده اما به صورت دقیق جواب داده نشده
تاپیکی دیگه ای برای آموزش ریسورس ندارید ؟

rezarko
پنج شنبه 23 آذر 1391, 15:31 عصر
میشه اطلاعات رو بریزم داخل یه فایل DLL بعد بخونم؟ فکر کنم اینجوری امن تر باشه

SHD.NET
پنج شنبه 23 آذر 1391, 15:45 عصر
آره . اینجوری میشه و هیچ مشکلی پیش نمیاد . اما درسته که امنیتش یکم بیشتر میشه ولی اگه طرف پسوند فایل رو به TXT تغییر بده دوباره همه چی لو میره :لبخند:

SHD.NET
پنج شنبه 23 آذر 1391, 15:47 عصر
یه پیشنهاد دارم . پسوند فایلو یه چیز بزار که سخت بشه عوضش کرد . مثلا اگه پسوند های زیر رو بزاری طرف نمتونه پسوند فایلتو عوض کنه . یا اگرم بتونه باید آدم حرفه ای باشه

*.mag *.lnk

:چشمک:\\\موفق باشید///:چشمک:

rezarko
پنج شنبه 23 آذر 1391, 15:59 عصر
خوب اگه پسوند فایل رو *.mag *.lnk بزارم چه تور باید تو برنامه بخونمش؟

مهرداد صفا
پنج شنبه 23 آذر 1391, 16:03 عصر
میشه اطلاعات رو بریزم داخل یه فایل DLL بعد بخونم؟ فکر کنم اینجوری امن تر باشه

بله. میتوانید حتی یک dll مخصوص resource ها داشته باشید.

مهرداد صفا
پنج شنبه 23 آذر 1391, 16:15 عصر
این تاپیک که ربطی به ریسورس نداره !! توش درخواست شده اما به صورت دقیق جواب داده نشده
تاپیکی دیگه ای برای آموزش ریسورس ندارید ؟

در پست شماره 11:
مراحل زیر را دنبال کنید:
1- در Solution explorer رو نام پروژه راست کلیک کنید و از منوی add زیر منوی existing item را اجرا کنید.
2- به مسیر فایل در این مثال "C:\windows\media\notify.wav" رفته و فایل را اضافه کنید.
3- روی نام فایل در solution explorer راست کلیک کنید و properties را باز کنید.
4- گزینه build action را به embedded resource تغییر دهید و برنامه را rebuild کنید.
5- کد زیر را در فرم یا... قرار دهید و اجرا کنید:

namespaceWindowsFormsApplication1
{
//...
//..
(newSystem.Media.SoundPlayer(System.Reflection.Ass embl y.GetExecutingAssembly().GetManifestResourceStream ("WindowsFormsApplication1.notify.wav"))).Play( );
//..

شما میتوانید پس از گرفتن Stream از GetManifestResourceStream مستقیما به آن دسترسی داشته باشید.
تاپیکهای کاملتر فکر میکنم باشند ولی باید گشت.

SHD.NET
پنج شنبه 23 آذر 1391, 16:26 عصر
خوب اگه پسوند فایل رو *.mag *.lnk بزارم چه تور باید تو برنامه بخونمش؟
اگه پسوند فایلو .lnk بزاری . مثل همیشه که فایل رو توی برنامه لود می کردی . اون فایلو لود میکنی فقط اگه نام فایل data.txt ّود شما دیگه نام فایل رو به صورت data.lnk لود می کنید . خوبی این کار اینه که پسوند فایل از دید عوام مخفی میشه ولی شما توی برنامه با همین پسوند باید بخونینش

:چشمک:\\\موفق باشید///:چشمک:

rezarko
پنج شنبه 14 دی 1391, 14:19 عصر
ممنون. لطفا یه مثال از Encrypt کردن کد بزارید

SHD.NET
پنج شنبه 14 دی 1391, 14:29 عصر
از این 2 تا فانکشن استفاده کن برای انکرایپت و دیکرایپت . ببین میکلت حل میشه

public string AES_Encrypt(string input, string pass) {
System.Security.Cryptography.RijndaelManaged AES = new System.Security.Cryptography.RijndaelManaged();
System.Security.Cryptography.MD5CryptoServiceProvi Hash_AES = new System.Security.Cryptography.MD5CryptoServiceProvi ();
der;
string encrypted = "";
try {
byte[,] hash;
byte[] temp = Hash_AES.ComputeHash(System.Text.UTF8Encoding.UTF8 .GetBytes(pass));
Array.Copy(temp, 0, hash, 0, 16);
Array.Copy(temp, 0, hash, 15, 16);
AES.Key = hash;
AES.Mode = Security.Cryptography.CipherMode.ECB;
System.Security.Cryptography.ICryptoTransform DESEncrypter = AES.CreateEncryptor;
byte[] Buffer = System.Text.UTF8Encoding.UTF8.GetBytes(input);
encrypted = Convert.ToBase64String(DESEncrypter.TransformFinal , Block(Buffer, 0, Buffer.Length));
return encrypted;
}
catch (Exception ex) {
throw ex;
}
}

public string AES_Decrypt(string input, string pass) {
System.Security.Cryptography.RijndaelManaged AES = new System.Security.Cryptography.RijndaelManaged();
System.Security.Cryptography.MD5CryptoServiceProvi Hash_AES = new System.Security.Cryptography.MD5CryptoServiceProvi ();
der;
string decrypted = "";
try {
byte[,] hash;
byte[] temp = Hash_AES.ComputeHash(System.Text.UTF8Encoding.UTF8 .GetBytes(pass));
Array.Copy(temp, 0, hash, 0, 16);
Array.Copy(temp, 0, hash, 15, 16);
AES.Key = hash;
AES.Mode = Security.Cryptography.CipherMode.ECB;
System.Security.Cryptography.ICryptoTransform DESDecrypter = AES.CreateDecryptor;
byte[] Buffer = Convert.FromBase64String(input);
decrypted = System.Text.UTF8Encoding.UTF8.GetString(DESDecrypt , er.TransformFinalBlock(Buffer, 0, Buffer.Length));
return decrypted;
}
catch (Exception ex) {
throw ex;
}
}

:چشمک:\\\موفق باشید///:چشمک:

SHD.NET
پنج شنبه 14 دی 1391, 14:33 عصر
اگه هم نشد میتونی از کامپوننت های چیلکات استفاده کنی . طی یکی دو روز آینده آموزش کدکردن رشته ها به وسیله این کامپوننت رو توی این تاپیک (http://barnamenevis.org/showthread.php?376600-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D9%87%D8%A7%DB%8C-%D9%BE%D8%B1%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D8%A8%D8%B3%D8%AA%D9%87-Chilkat)میزارم

:چشمک:\\\موفق باشید///:چشمک:

rezarko
پنج شنبه 14 دی 1391, 14:34 عصر
بازم ممنون میشه در مورد ورودی های این دو تابع توضیح بدید؟

rezarko
پنج شنبه 14 دی 1391, 14:46 عصر
ارور میده:
97789

SHD.NET
پنج شنبه 14 دی 1391, 14:56 عصر
الان دارم روی Chilkat کار می کنم . نتیجه شو اینجا اعلام می کنم وقتی تموم شد

:چشمک:\\\موفق باشید///:چشمک:

par3eh
پنج شنبه 14 دی 1391, 15:14 عصر
دوست عزیز اگه اطلاعات حجمش کمه و طولانی نیست از setting استفاده کنین.مثل رمز ورود و یا اطلاعاتی که نباید کاربر ببینه و شما پایگاه داده ندارین، دگ احتیاج به این همه سختی نیست....یه جستجو کنید طریقه استفادشو پبدا میکنی.

SHD.NET
پنج شنبه 14 دی 1391, 15:24 عصر
ستینگ هم مد نظر من بود . اما چون گفتن دیتاش توی فایل txt هستش این روش ها رو پیشنهاد کردم

در هر صورت :چشمک:\\\موفق باشید///:چشمک:

par3eh
پنج شنبه 14 دی 1391, 16:35 عصر
دوست عزیز برای اینکه فایلتون کلا دور از دست کاربر باشه شما یک فایل txt در ریسورس برنامه اضافه کنین.
شما میتونین این فایل رو به صورت زیر فراخوانی کنین و استفاده کنید.فرض کنین اسم فایل data باشه و پروژه شما هم اسمش test باشه :


test.Properties.Resources.data


خروجی از نوع string هس.
برای تغییر در این فایل شما ناچارا باید یک فایل جدید در یک مسیر که کاربر متوجه نشه بسازین ، اطلاعاتتونو موقتا در اون ذخیره کنید و با کد زیر فایل data رو بروز کنید :


File.WriteAllText("C:\\tempdata.txt", test.Properties.Resources.data);


حالا میتونین اون فایل ساخته شده و پاک کنید.شاید چند میلی ثانیه هم طول نکشه.
اینجوری هم فایل در دسترس نیست هم خطر پاک شدن در هنگام جابه جایی برنامه رو ندارین.

برای داده های غیر متنی مثل عکس و یا غیره هم میتونین از این روش استفاده کنین مثلا عکس :
Bitmap bitmap = Resources.MyImageResource;
bitmap.Save("filename.jpg", ImageFormat.Jpeg);

آیکن ها :
notifyIcon.Icon = Properties.Resources.myIcon;

من از همین روش برای استفاده از چند تابع که ناچارا در یک فایل جدا از برنامم بودن استفاده کردم و میخواستم سکرت باشه.خوب هم جواب داده،قابل دسترسی هم به هیچ عنوان نیس ، رمز گذاری هم لازم نداره ، سرعتشم بالاست...به نظرم خیلی خوبه.
بازم هرچی که صلاحتونه :)

rezarko
پنج شنبه 14 دی 1391, 16:44 عصر
نه دوستان این برنامه ای که میخوام بنویسم باید اطلاعات رو انکریپت کنه بعد ذخیره کنه و واسه خودم ایمیل کنه

par3eh
پنج شنبه 14 دی 1391, 16:56 عصر
میتونین اطلاعاتو از هر روشی که بخوای در قالب string بفرستی فرض کن تابع ارسالت senddata باشه :


SendData(test.Properties.Resources.data);


همه داده ها ارسال میشه.احتیاجی به کد و دیکد کردن نیس فایل ریسورست قابل مشاهده واسه کاربر نیست . فقط واسه اینکه اطلاعات این فایل تغییر کنه باید به صورت temp در سیستم ذخیره بشه و دوباره در ریسورس بریزی . شلید بشه بدونه ذخیره کردن موقت در سیستم هم همین اتراتژیو عملی کرد.من سرچ نکردم راستشو بخوای....

در solution xplorer روی نام پروژه راست کلیک کن.پروپرتیس رو انتخاب و تگ ریسورس رو انتخاب کنین.
حال نوع فایل رو other انتخاب کنید و یک فایل text که در ویندوز ذخیره کردین (مثلا data.txt) رو درون پنجره اضافه کنین.الان شما یک فایل متنی توی ریسورستون دارین.
میتونین اطلاعاتو ذخیره کنین.و هروقت بخواین میلش کنین.

par3eh
پنج شنبه 14 دی 1391, 16:59 عصر
میتونین اطلاعاتو از هر روشی که بخوای در قالب string بفرستی فرض کن تابع ارسالت senddata باشه :


SendData(test.Properties.Resources.data);


همه داده ها ارسال میشه.
احتیاجی به کد و دیکد کردن نیس فایل ریسورست قابل مشاهده واسه کاربر نیست . فقط واسه اینکه اطلاعات این فایل تغییر کنه باید به صورت temp در سیستم ذخیره بشه و دوباره در ریسورس بریزی . شاید بشه بدونه ذخیره کردن موقت در سیستم ،همین استراتژیو عملی کرد.من سرچ نکردم راستشو بخوای....

در solution xplorer روی نام پروژه راست ،پروپرتیس رو انتخاب و تگ ریسورس رو انتخاب کنین.
حال نوع فایل رو other انتخاب کنید و یک فایل text که در ویندوز ذخیره کردین (مثلا data.txt) رو درون پنجره اضافه کنین.الان شما یک فایل متنی توی ریسورستون دارین.
میتونین اطلاعاتو ذخیره کنین.و هروقت بخواین میلش کنین.