PDA

View Full Version : مشکل با رمز گذاری و رمز گشایی



emilly
سه شنبه 14 مهر 1394, 10:11 صبح
درود بر اساتید

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


اینم کدهام :





private static readonly byte[] initVectorBytes = Encoding.ASCII.GetBytes("tu89geji340t89u2");


// This constant is used to determine the keysize of the encryption algorithm.
private const int keysize = 256;


public static string Encrypt(string plainText, string passPhrase)
{
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
using (PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null))
{
byte[] keyBytes = password.GetBytes(keysize / 8);
using (RijndaelManaged symmetricKey = new RijndaelManaged())
{
symmetricKey.Mode = CipherMode.CBC;
using (ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes))
{
using (MemoryStream memoryStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] cipherTextBytes = memoryStream.ToArray();
return Convert.ToBase64String(cipherTextBytes);
}
}
}
}
}
}


public static string Decrypt(string cipherText, string passPhrase)
{
byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
using (PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null))
{
byte[] keyBytes = password.GetBytes(keysize / 8);
using (RijndaelManaged symmetricKey = new RijndaelManaged())
{
symmetricKey.Mode = CipherMode.CBC;
using (ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes))
{
using (MemoryStream memoryStream = new MemoryStream(cipherTextBytes))
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
byte[] plainTextBytes = new byte[cipherTextBytes.Length];
int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
}
}
}
}
}
}






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

emilly
سه شنبه 14 مهر 1394, 10:19 صبح
بهتره کمی بیشتر توضیح بدم ...................

ببینین من یه پسوردمثلا 6 رو با تابع Encrypt رمزگذاری کرده توی دیتابیس ذخیره کردم ............
بعد اومدم این پسورد یعنی 6 رو با تابع Decrypt رمزگشایی کردم و چک کردم که آیا چنین پسوردی توی دیتابیس هست یا نه هر بار جواب منفی میداد که وجود ندارد !!!!!!!!!!!!!!!!!!!!!!!!!!

بعد واسه تست اومدم مقدار 6 رو دوباره با تابع Encrypt رمزگذاری کردم دیدم مقداری که دفععه دوم رمز گذاری شده بود با مقداری که توی دیتتابیسم ذخیره شده بو متفاوته نمیدونم چیکار کنم ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

emilly
سه شنبه 14 مهر 1394, 11:42 صبح
دوستان کسی تا حالا به چنین مشکلی بر نخورده :متفکر::متفکر::متفکر::متفکر:: تفکر:

emilly
چهارشنبه 15 مهر 1394, 05:41 صبح
حتی پیشنهادی هم نیست!!!!!!!؟!؟؟؟؟؟؟!؟؟!

keiv@n
چهارشنبه 15 مهر 1394, 10:37 صبح
نمی خواد پسورد بانک رو Decrypt کنی
بهتره پسوردی که کاربر وارد می کنه رو رمز کنی encrypt کنی بعد رشته تولید شده رو با مقدار بانک compare کنی ...

mr_ayma
چهارشنبه 15 مهر 1394, 10:43 صبح
سلام ، همونطور که keiv@n (http://barnamenevis.org/member.php?251173-keiv-n) گفتند روشی که انتخاب کردین صحیح نیست ، شما باید ازHashing به جای Encryption استفاده کنید

emilly
چهارشنبه 15 مهر 1394, 14:51 عصر
نمی خواد پسورد بانک رو Decrypt کنی
بهتره پسوردی که کاربر وارد می کنه رو رمز کنی encrypt کنی بعد رشته تولید شده رو با مقدار بانک compare کنی ...

دقیقا همین کارروهم خواستم با تابع encrypt که نوشتم انجام بدم ولی برای مقدار یکسانی که وارد میکنم هربار یه جوری encrypt میکنه مثلا اگه قبلا من ۶ رو به عنوان پسورد داده بوده و ذخیره کرده بودم الان که میخوام دوباره این ۶ رو encrypt کنم و مقدارش رو با مقدار دیتابیسم مقایسه کنم یه رشته متفاوت encrypt .میکنه مشکلمم همینه که یه مقدار رو هر بار به صورت رشته های متفاوت encrypt میکنه