PDA

View Full Version : قفل کردن فایل



catgirl
پنج شنبه 23 خرداد 1392, 02:34 صبح
سلام.دوستان نحوه ی قفل کردن یک فایل در برنامه نویسی سی شارپ به چه صورت است؟ومن الله توفیق

saeedhushmand
پنج شنبه 23 خرداد 1392, 12:20 عصر
سلام ، دوست عزیز فکر کنم تابع های زیر بدردت بخوره
private void EncryptFile(string inputFile, string outputFile)
{

try
{
string password = @"myKey123"; UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);

string cryptFile = outputFile;
FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);

RijndaelManaged RMCrypto = new RijndaelManaged();

CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateEncryptor(key, key),
CryptoStreamMode.Write);

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

int data;
while ((data = fsIn.ReadByte()) != -1)
cs.WriteByte((byte)data);


fsIn.Close();
cs.Close();
fsCrypt.Close();
}
catch
{
MessageBox.Show("Encryption failed!", "Error");
}
}
private void DecryptFile(string inputFile, string outputFile)
{

{
string password = @"myKey123";
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);

FileStream fsOut = new FileStream(outputFile, FileMode.Create);

int data;
while ((data = cs.ReadByte()) != -1)
fsOut.WriteByte((byte)data);

fsOut.Close();
cs.Close();
fsCrypt.Close();

}
}

Sal_64
دوشنبه 03 تیر 1392, 21:56 عصر
سلام
برای پسورد زمانیکه خواستم فقط از عدد استفاده کنم و حتی برا شروع کلمه پسورد چیزی به جر my مینوشتم خطا زیر میداد
specified initialization vector (vi) dose not match the block size for this algoritm
کسی میدونه این خطا واسه چیه
تشکر

c-sharp_South
دوشنبه 03 تیر 1392, 22:22 عصر
سلام . میشه در مورد کد و کارش بیشتر توضیح بدید که دقیقا چه کاری رو انجام میدن؟
اگه یک خورده کد رو تحلیل کنید ممنون میشم.

mthreat.info
سه شنبه 04 تیر 1392, 06:51 صبح
این روش رمز نگاری Rijndael هست که میگیره فایل رو بر اساس ادویه ای (تو رمزنگاری برای نامفهوم کردن کد ایجاد شده استفاده میشه "تو این کد ازش استفاده نشده" ) که بهش میزنید و رمزی که بهش میدید میگیره فایل رو رمز میکنه ، برای اون دوستمون که با خطا مواجه شدن احتمالا رمزی که دادن طولش کم بوده یا فایلی که قبلا رمز شده رو با پسورد اشتباه داشتن دیکد میکردن

Sal_64
سه شنبه 04 تیر 1392, 07:24 صبح
این روش رمز نگاری Rijndael هست که میگیره فایل رو بر اساس ادویه ای (تو رمزنگاری برای نامفهوم کردن کد ایجاد شده استفاده میشه "تو این کد ازش استفاده نشده" ) که بهش میزنید و رمزی که بهش میدید میگیره فایل رو رمز میکنه ، برای اون دوستمون که با خطا مواجه شدن احتمالا رمزی که دادن طولش کم بوده یا فایلی که قبلا رمز شده رو با پسورد اشتباه داشتن دیکد میکردن
منظور از ادویه چیه ؟
چجوری باید داخل کد بالا آرودش؟
طول پسورد حداقل و حداکثر چند کاراکتر باید باشه؟

mthreat.info
سه شنبه 04 تیر 1392, 07:41 صبح
منظور از ادویه چیه ؟
چجوری باید داخل کد بالا آرودش؟
طول پسورد حداقل و حداکثر چند کاراکتر باید باشه؟
منظور از ادویه نمیدونم چطوری توضیح بدم (مثلا : سلام====>سخخحنئددلکموکموکشاضصثضصثم ) تو مثال سلام بعد از اضافه کردن ادویه
شرمنده من با RijndaelManaged برنامه ننوشتم ولی با Rijndael نوشتم
طولش رو فکر کنم باید تا 256 بایت باشه دقیقا یادم نیست ولی برای رسیدن به متن اصلی باید از یک کلید استفاده کنید

mthreat.info
سه شنبه 04 تیر 1392, 07:52 صبح
با یکم ور رفتن فهمیدم میشه با PasswordDeriveBytes پسورد رو ادویه زد و بر اساس الگوریتم MD5 و SHA1 هش کرد

mthreat.info
سه شنبه 04 تیر 1392, 08:27 صبح
من با یکم دست کاری تو کد دوستمون پسورد رو ادویه زدم :d

کد کردن :


OpenFileDialog opaa = new OpenFileDialog();
SaveFileDialog ss = new SaveFileDialog();
opaa.ShowDialog();
ss.ShowDialog();
string password = @"myKey123";
byte[] initVectorBytes = Encoding.ASCII.GetBytes("@1k2c3$4e5x6g7H6");
byte[] saltValueBytes = Encoding.ASCII.GetBytes("vd754#2@");
PasswordDeriveBytes passworda = new PasswordDeriveBytes(
password,
saltValueBytes,
"SHA1",
2);
byte[] keyBytes = passworda.GetBytes(256 / 8);
string cryptFile = ss.FileName;
FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);

RijndaelManaged RMCrypto = new RijndaelManaged();

CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateEncryptor(keyBytes, initVectorBytes),
CryptoStreamMode.Write);

FileStream fsIn = new FileStream(opaa.FileName, FileMode.Open);

int data;
while ((data = fsIn.ReadByte()) != -1)
cs.WriteByte((byte)data);


fsIn.Close();
cs.Close();
fsCrypt.Close();


دیکد


OpenFileDialog opaa = new OpenFileDialog();
SaveFileDialog ss = new SaveFileDialog();
opaa.ShowDialog();
ss.ShowDialog();
string password = @"myKey123";
byte[] initVectorBytes = Encoding.ASCII.GetBytes("@1k2c3$4e5x6g7H6");
byte[] saltValueBytes = Encoding.ASCII.GetBytes("vd754#2@");
PasswordDeriveBytes passworda = new PasswordDeriveBytes(
password,
saltValueBytes,
"SHA1",
2);
byte[] keyBytes = passworda.GetBytes(256 / 8);

FileStream fsCrypt = new FileStream(opaa.FileName, FileMode.Open);

RijndaelManaged RMCrypto = new RijndaelManaged();

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

FileStream fsOut = new FileStream(ss.FileName, FileMode.Create);

int data;
while ((data = cs.ReadByte()) != -1)
fsOut.WriteByte((byte)data);

fsOut.Close();
cs.Close();
fsCrypt.Close();

تو کد بالا:
SHA1 الگوریتم رمزنگاری SHA1 هست
2 بکار گرفته شده میتونه (تعداد کد کردن) 1 یا 2 کافیه
256 سایز کلید هست که میتونه 128 و 192 هم باشه
initVectorBytes کد IV هست که باید 16 کاراکتر ASCII باشه