PDA

View Full Version : حرفه ای: خوانده شدن فایل ها فقط توسط نرم افزار خودمان



rezaei_y
پنج شنبه 05 تیر 1393, 18:30 عصر
با سلام خدمت همه دوستان

یک نرم افزار داریم که به ازای هر کاربر چند فایل رو از اینترنت میگیره و داخل سیستم کاربر ذخیره میکنه مثلا فایل pdf یا swf و از طریق نرم افزار مشاهده میکنه

میخوام کاری کنم که اگه کاربر مسیر فایل ها رو پیدا کرد نتونه فایل ها رو باز کنه و یا اینکه به سختی بتونه این کار رو انجام بده

باید چکار کنم؟کسی ایده ای به ذهنش میرسه؟

ممنون میشم راهنمایی کنید
با تشکر

shahryari
پنج شنبه 05 تیر 1393, 18:49 عصر
فایل رو هنگام دانلود اینکرایپت کن و هنگام خواندن توسط نرم افزا خودت هم دیکرایپت کن
http://www.codeproject.com/Articles/26085/File-Encryption-and-Decryption-in-C

rezaei_y
پنج شنبه 05 تیر 1393, 19:47 عصر
ممنون از لطفتون
فقط یه سوال دیگه من ازقبل فایلهام رو کد شده روی سرور قرار میدم و کاربر دانلود میکنه و موقع خوندن توسط نرم افزار Decrypt میشن
اما میشه کاری کرد که موقع Decrypt شدن فایل فیزیکی Decrypt شده توی مسیر خاصی ایجاد نشه و توی حافظه عمل Decrypt شدن صورت بگیره

نمیدونم سوالم و خوب پرسیدم یا نه؟
منظورم اینه که اگه بعد از Decrypt شدن دوباره فایل Decrypt توی کامپیوتر تولید بشه کاربر باز میتونه اونو پیدا کنه

shahryari
پنج شنبه 05 تیر 1393, 20:04 عصر
فایلهای انکرایپت شده رو روی هارد ذخیره کن
دیکرایپت کن وبریز توی مموری استریم که مقیم رم هست و اجرا کن

rezaei_y
پنج شنبه 05 تیر 1393, 21:34 عصر
جناب شهریاری متاسفانه هر کاری کردم اجرا نشد

این کدهایی که از اینترنت گرفتم


string password = @"myKey123"; // Your Key Here

UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);

FileStream fsCrypt = new FileStream(inputFile, FileMode.Open);

RijndaelManaged RMCrypto = new RijndaelManaged();

CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateDecryptor(key, key),
CryptoStreamMode.Read);

MemoryStream ms = new MemoryStream();
int data;
while ((data = cs.ReadByte()) != -1)
ms.WriteByte((byte)data);

BinaryReader br = new BinaryReader(ms);
byte[] bin = br.ReadBytes(Convert.ToInt32(ms.Length));
Assembly a = Assembly.Load(bin);
MethodInfo method = a.EntryPoint;
if (method != null)
{

}
object o = a.CreateInstance(method.Name);
method.Invoke(o, null);


توی خط

byte[] bin = br.ReadBytes(Convert.ToInt32(ms.Length));

هیچ بایتی رو در bin قرار نمیده

Mahmoud.Afrad
جمعه 06 تیر 1393, 12:46 عصر
از خود مموری استریم بافر رو بگیر:

while ((data = cs.ReadByte()) != -1)
{
ms.WriteByte((byte)data);
}

byte[] bin = ms.GetBuffer();

میتونی قبلش Lenght رو هم چک کنی بزرگتر از 0 باشه.

rezaei_y
جمعه 06 تیر 1393, 14:55 عصر
ممنون جناب Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad)

کاملا درسته اون قسمت جواب میده ولی متاسفانه بقیه کدم جواب نمیده

میخوام بعد از اینکه فایل ورودی رو توسط کد زیر decrypt کردم دیگه فایل جدید رو روی هارد دیسک ذخیره نکنم و از حافظه اون رو اجرا کنم


CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateDecryptor(key, key),
CryptoStreamMode.Read);

Mahmoud.Afrad
جمعه 06 تیر 1393, 15:22 عصر
فایل چی هست و چجوری میخوای اجراش کنی.

rezaei_y
جمعه 06 تیر 1393, 15:51 عصر
فایل هایی که دارم یا pdf هستن یا فلش
کاربر این فایل ها رو دانلود میکنه داخل سیستم خودش
میخوام فقط فایل ها از طریق نرم افزار باز بشن و کاربر اگه مسیر فایل ها رو پیدا کرد نتونه اجراشون کنه
آقای شهریاری گفتن فایل ها رو کد کن و موقع اجرا دیکد کن ولی موقع دیکد کردن باید دوباره فایل روی هارد ساخته بشه مگه اینکه توی حافظه قرار بدیم و از حافظه اجرا کنیم

اگه روش دیگه ای به ذهنتون میرسه ممنون میشم راهنمایی کنید

Mahmoud.Afrad
جمعه 06 تیر 1393, 15:57 عصر
باید از کامپوننت هایی استفاده کنی که بتونن استریم دریافت کنند و نمایش بدن. در این صورت همون مموری استریم رو استفاده میکنی و نیازی به ذخیره روی فایل نیست.

shahryari
جمعه 06 تیر 1393, 17:22 عصر
دوست من هر فایلی رو نمیشه به این شکل باز کرد
فایلهای عکس و صوتی و متنی و... که دات نت برای اجرا یا نمایش دادن اونها آرگومان استریم یا مموری استریم میگیره رو میتونید به این صورت باز کنید
.
برای اجرای سایر فایلها 2 راه دارید
راه اول : پست شماره 10 رو بخونید
راه دوم : فایل رو بعد از دیکرایپت داخل پوشه temp بصورت موقت ذخیره واجرا کنی و هنگام بسته شدن هم فایل رو حذف کنید

rezaei_y
شنبه 07 تیر 1393, 17:17 عصر
جناب شهریاری عزیز اگه همون موقع که فایل رو به صورت موقت داخل پوشه temp قرار دادم کاربر اون رو پیدا کرد خوب میتونه فایل رو بدست بیاره

حالت استریم هم به قول شما روی هر نوع فایلی پیاده نمیشه و برای نمایش هم حتما باید از کامپوننت استفاده نماییم

چکار باید کرد؟

rezaei_y
یک شنبه 08 تیر 1393, 17:15 عصر
دوستان راهنمایی کنید؟