PDA

View Full Version : سوال: میشه یه فایل رو به صورت افکت کد کرد؟



Mosafers
پنج شنبه 11 دی 1393, 09:54 صبح
سلام وقت همگی بخیر لطفا به عکس زیر دقت کنید آیا میشه با استفاده از یک الگورتم خاص عکس رو به این صورت کد کرد؟؟؟

127100

rahnema1
پنج شنبه 11 دی 1393, 14:45 عصر
سلام
این افکت نیست. در واقع عکس را رمز گذاری کرده که قابل مشاهده نباشه
مثلا با داشتن سه تا seed میتونید عکس را رمزنگاری کرده و دوباره به حالت اول برگردونید این هم یک نمونه ساده البته سرعتش کمه
http://www.sharefile.ir/uploads/1420183868.zip


Bitmap bm1 = new Bitmap("image_encryption.png");
Bitmap bm2 = new Bitmap(bm1.Width,bm1.Height);
Bitmap bm3 = new Bitmap(bm1.Width,bm1.Height);
Random rand1 = new Random();
int [] seed = {rand1.Next(), rand1.Next(), rand1.Next()};
Color temp;
{
Random[] rnd ={ new Random(seed[0]) ,new Random(seed[1]) ,new Random(seed[2])};
for (int i = 0; i < bm1.Width; i++) {
for (int j = 0; j < bm1.Height; j++) {
temp = bm1.GetPixel(i, j);
bm2.SetPixel(i, j, Color.FromArgb((temp.R + rnd[0].Next(0, 256)) % 256,
(temp.G + rnd[1].Next(0, 256)) % 256,
(temp.B + rnd[2].Next(0, 256)) % 256));
}
}
}
{
Random[] rnd ={ new Random(seed[0]) ,new Random(seed[1]) ,new Random(seed[2])};
for (int i = 0; i < bm2.Width; i++) {
for (int j = 0; j < bm2.Height; j++) {
temp = bm2.GetPixel(i,j);
bm3.SetPixel(i,j,Color.FromArgb(unchecked((byte)(t emp.R - rnd[0].Next(0, 256))),
unchecked((byte)(temp.G - rnd[1].Next(0, 256))),
unchecked((byte)(temp.B - rnd[2].Next(0, 256)))));
}


}
}
pictureBox1.Image = bm1;
pictureBox2.Image = bm2;
pictureBox3.Image = bm3;

Mosafers
پنج شنبه 11 دی 1393, 16:39 عصر
واقعا ممنونم کارت حرف نداشت ببخشید میشه عکس کد شده رو ذخیره کرد و دوباره همون عکس رو بازگردانی کرد؟ راهی به این شکل هست؟

rahnema1
پنج شنبه 11 دی 1393, 16:48 عصر
بله میشه شما bm2 را ذخیره کنید( با تابع save ) فقط اون سه عددی که در seed هست را در یه جایی ذخیره کنید که بعدا ازش استفاده می کنید

Mosafers
پنج شنبه 11 دی 1393, 16:52 عصر
خوب من هر چی امتحان میکنم نمیشه...
میشه خواهش کنم کمکم کنید آخه کد سورس با کد تاپیکتون فرق میکنه؟ از کدوم؟

rahnema1
پنج شنبه 11 دی 1393, 18:26 عصر
با فرمتی مثل bmp یا tiff ذخیره کنید که فشرده سازی lossless داشته باشه

bm2.Save("bm2.bmp", System.Drawing.Imaging.ImageFormat.Bmp );

Mosafers
پنج شنبه 11 دی 1393, 20:08 عصر
والا آقای راهنما ببینید من چی مد نظرم هست.
من میخوام با استفاده از همین روش شما که شما طبق کد زیر از طریق بیت تصادفی این کار رو کردید من از یه روش رمز گذاری ثابت مثل RSA تصویر رو کد کنم و ایمیل کنم در سیستم دیگر با برنامه بشه دیکدش کرد؟ :متفکر: سناریو به چه شکله لطفا راهنماییم کنید که کسی جز شما در تاپیک های قبلی هم نبود... :افسرده:
Random[] rnd ={ new Random(seed[0]) ,new Random(seed[1]) ,new Random(seed[2])};

rahnema1
پنج شنبه 11 دی 1393, 20:14 عصر
به جای اینکه روی پیکسلها پردازش کنید چرا کل فایل رمزنگاری نمی کنید؟ مثل فایل rar که رمز داره وقتی باز می کنید تصویر اصلی را بیرون میارید

Mosafers
پنج شنبه 11 دی 1393, 20:21 عصر
این روش برای یکی از برنامه هام است و میخوام هر طور شده به این روش باشه در بعضی مواقع بسته به نیاز میشه مقدار رو کم و زیاد کرد...
این روش که قرار دادید بسیار عالی هستش فقط 2 تا مشکل که هست میخوام سناریو به شکلی که توضیح دادم باشه.

بشه با یکی از فرمول های خاص عکس رو رمز نگاری کرد (مثل این فرمول (http://www.codeproject.com/Articles/14150/Encrypt-and-Decrypt-Data-with-C))
قابل بازگردانی باشه حالا هر طوری.

rahnema1
پنج شنبه 11 دی 1393, 22:01 عصر
این روشی که من گذاشتم بر حجم داده ها چیزی زیاد نمیکنه اما اگه پیکسلها بخواد با روشهایی مثل RSA رمزنگاری بشه احتمالا حجم داده ها افزایش پیدا می کنه
همچنین یک نکته اینه که تصویرها از دو قسمت هدر و داده های تصویر تشکیل میشه
لازمه که بتونیم داده های رمزنگاری شده را در قسمت داده ها قرار بدیم که کتابخانه گرافیک دات نت چنین قابلیتی نداره باید مثلا از توابع winapi برای نوشتن bmp استفاده بشه که دردسر خاص خودش را داره
فکر کنم همون بهتر که کل را فایل را رمز نگاری کنید که راحت تره

Mosafers
پنج شنبه 11 دی 1393, 22:30 عصر
تشکر و سپاس از توضیحات کاملتون متوجه صحبت هاتون شدم پس بهتر از از این روش پیشنمایش تصویر را استخراج کنم و فایل کد شده رو در دیتابیس ذخیره کنم و در صورت نیاز دیکد کنم.
ممنونم خسته نباشید./

systam
جمعه 12 دی 1393, 00:20 صبح
سلام
چرا هنگام استفاده برنامه خطا مبده

rahnema1
جمعه 12 دی 1393, 22:37 عصر
سلام
چرا هنگام استفاده برنامه خطا مبده

متاسفانه در VB نمیتونیم از unchecked استفاده کنیم