PDA

View Full Version : سوال: لطفا راهی برای جلوگیری از لو رفتن اطلاعات دیتا بیس برنامم بهم پیشنهاد کنید؟



zero1iman
یک شنبه 12 شهریور 1391, 23:23 عصر
سلام دوستان،من پروژه دانشجوییم رو باید تا پایان این ماه تحویل بدم و اون برنامه ایه که با یک بانک اطلاعاتی نسبتا بزرگ سروکار داره و تمام اطلاعات بانک رو باید خودم به شکل دستی وارد کنم.اما دغدغه ای که دارم اینه که نمیخوام استادم به همین سادگی این بانک رو ازم بقاپه! آخه این برنامه با کمی تغییرات میتونه خیلی تجاری بشه و اصلا دوست ندارم اون این کارو زودتر از من بکنه! :افسرده:
حالا میخواستم ببینم با توجه به اینکه به احتمال زیاد مجبورم سورس برنامه رو در اختیار استاد بذارم کسی راهی پیشنهاد میده که حداقل بانک برنامه که قسمت اصلیش هست لو نره؟!اگه کسی ایده ای داره لطفا بگه خیلی حیاتیه.(در ضمن من تو کار با بانک اطلاعاتی مبتدی هستم اگه واضح توضیح بدید که دیگه خیلی ممنون میشم :خجالت:).

amin.m1993
دوشنبه 13 شهریور 1391, 01:33 صبح
سلام.

دوست عزیز شما می تونید بانک اطلاعاتی رو رمزگزاری کنید.کار خیلی راحتیه یه سرچ کنید آموزشش هست.



تا اونجایی هم که من میدونم بانک اطلاعاتی چیزی نیست که بشه به همین راحتی رمزشو شکوند.:چشمک:



موفق باشید.

Mahmoud.Afrad
دوشنبه 13 شهریور 1391, 02:22 صبح
رمزگزاری راه حل درستی نیست چون بالاخره سورس کد را به استاد تحویل میدید و استاد میتونه به راحتی اطلاعات رمز شده رو رمزگشایی کنه.

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

FastCode
دوشنبه 13 شهریور 1391, 03:17 صبح
اگر من بودم,یک پروژه دیگه مینوشتم تا ریسک به صفر برسه

zero1iman
دوشنبه 13 شهریور 1391, 10:02 صبح
رمزگزاری راه حل درستی نیست چون بالاخره سورس کد را به استاد تحویل میدید و استاد میتونه به راحتی اطلاعات رمز شده رو رمزگشایی کنه.

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

خودم هم تنها راهی که به ذهنم رسیده بود همینه. البته این استاده یکم زرنگتر از این حرفاست و دقیقا دنبال اطلاعات این دیتابیس هست!

اگر من بودم,یک پروژه دیگه مینوشتم تا ریسک به صفر برسه
متاسفانه امکانش وجود نداره بخوام موضوع رو تغییر بدم.
بهرحال خیلی متشکرم از دوستان اگه کسی نظر دیگه ای داره ممنون میشم بگه.

amin.m1993
دوشنبه 13 شهریور 1391, 11:12 صبح
رمزگزاری راه حل درستی نیست چون بالاخره سورس کد را به استاد تحویل میدید و استاد میتونه به راحتی اطلاعات رمز شده رو رمزگشایی کنه.


فکر کنم منظور منو اشتباه متوجه شدید .منظورم Encrypt کردن هست نه اینکه یه رمز بدی و خلاص که بهترین روش هم استفاده از تکنولوژی AES هست

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


این روش پیچیده ترین هست.البته شما میتونی از یه سیستم کدگزاری اختیاری هم استفاده کنی که یه کم زمانبر هست!


using System;
using System.Security.Cryptography;
using System.IO;

namespace AES_Encryption
{

public class AES
{
public AES()
{
}

private byte[] Encrypt(byte[] clearData, byte[] Key, byte[] IV)
{

MemoryStream ms = new MemoryStream();

Rijndael alg = Rijndael.Create();
alg.Key = Key;

alg.IV = IV;
CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);

cs.Write(clearData, 0, clearData.Length);
cs.Close();
byte[] encryptedData = ms.ToArray();
return encryptedData;
}

private byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV)
{

MemoryStream ms = new MemoryStream();
Rijndael alg = Rijndael.Create();
alg.Key = Key;
alg.IV = IV;
CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(cipherData, 0, cipherData.Length);
cs.Close();
byte[] decryptedData = ms.ToArray();
return decryptedData;
}


public string Decrypt(string Data, string Password, int Bits)
{

byte[] cipherBytes = Convert.FromBase64String(Data);

PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password,

new byte[] { 0x00, 0x01, 0x02, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4 });

if (Bits == 128)
{
byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(16), pdb.GetBytes(16));
return System.Text.Encoding.Unicode.GetString(decryptedDa ta);
}
else if (Bits == 192)
{
byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(24), pdb.GetBytes(16));
return System.Text.Encoding.Unicode.GetString(decryptedDa ta);
}
else if (Bits == 256)
{
byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16));
return System.Text.Encoding.Unicode.GetString(decryptedDa ta);
}
else
{
return string.Concat(Bits);
}

}

public string Encrypt(string Data, string Password, int Bits)
{

byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(Data);

PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password,

new byte[] { 0x00, 0x01, 0x02, 0x1C, 0x1D, 0x1E, 0x03, 0x04, 0x05, 0x0F, 0x20, 0x21, 0xAD, 0xAF, 0xA4 });

if (Bits == 128)
{
byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(16), pdb.GetBytes(16));
return Convert.ToBase64String(encryptedData);
}
else if (Bits == 192)
{
byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(24), pdb.GetBytes(16));
return Convert.ToBase64String(encryptedData);
}
else if (Bits == 256)
{
byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
return Convert.ToBase64String(encryptedData);
}
else
{
return string.Concat(Bits);
}
}


}
}

debugger
دوشنبه 13 شهریور 1391, 12:10 عصر
در پروژه های دانشجویی هیچ وقت الزام نیست که داده های معتبر وارد سیستم نرم افزاری که تهیه کردین بکنید. شما می توانید اطلاعات تست وارد نمائید.
من فرض می کنم بانک اطلاعاتی شما حاوی شماره تلفن و ادرس و ... کل کشور هست و خیلی هم بروز هست . یعنی 118 برای کل کشور
خب شما در این برنامه ای که نوشتید 100 رکورد به عنوان تست وارد کنید و به استاد تحویل بدهید . استاد هیچ وقت حق اینو نداره که بگه اطلاعات اصلی . (یعنی دیتا بیس 118 کل کشور را میخوام)
را بده . یعنی استاد من به من اینطوری بگه . یدونه محکم میخوابونم در گوشش . بهش میگم حاضرم اعدام بشم . اما به تو یکی باج نمیدم . بیخودی استاد را پر رو نکنید .

یک بار استادمون به من گفت یه وبسایتی برای یک شرکتی طراحی کن . کار را استاد گرفته بود . منم گفتم 800 تومن میگیرم . چون خیلی دست و دل بازم گفتم 200 تومن مال شما.بعد اومد بهم گفت نه من 100 تومن به شما میدم . قیمت را هم من خودم تعیین می کنم به اونا میگم . شما 100 تومن بگیر برو کنار .

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

فرداش رفتم پیش استاد هر چی از دهنم در اومد بهش گفتم . رفتم تو دانشگاه هم ابروشو بردم .

حالا شما اومدی یه چیزایی میگی که ادم خندش میگیره

Mahmoud.Afrad
دوشنبه 13 شهریور 1391, 19:33 عصر
فکر کنم منظور منو اشتباه متوجه شدید .منظورم Encrypt کردن هست نه اینکه یه رمز بدی و خلاص که بهترین روش هم استفاده از تکنولوژی AES هست
...
}[/CSHARP]

دقیقا من هم همین encrypt را گقتم که در این مورد راه حل درستی نیست. چرا؟ چون سورس کد در اختیار هرکسی قرار بگیره الگوریتم و کلیدها لو میره. پس هر شخصی که سورس را دراختیار داشته باشه(در اینجا استاد) میتونه اطلاعات دیتابیس را به راحتی رمزگشایی کنه.

morrning
دوشنبه 17 مهر 1391, 09:15 صبح
کلید رو داخل یه DLL بنویس و به پروژت اضافش کن که اطلاعات از اون دی ال ال بیاد و مشخص نباشه البته این رو هم میشه دور زد