PDA

View Full Version : دیکد کردن اطلاعات هاش شده



programerinfonet
جمعه 07 تیر 1392, 14:20 عصر
سلام دوستان
من اطلاعاتم رو توسط تابع md5 کد می کنم اما موقع دیکد نمیدونم باید چه طور این کار رو بکنم
این مقادیر کلاسمه

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
namespace security
{

public class security
{

public static System.Security.Cryptography.MD5 m = System.Security.Cryptography.MD5.Create();
public static string Encrypt(MD5 md5Hash, string input)
{

// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)) ;

// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();

// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}

// Return the hexadecimal string.
return sBuilder.ToString();
}

public static bool Decrypt(MD5 md5Hash, string input, string hash)
{
// Hash the input.
string hashOfInput = Encrypt(md5Hash, input);

// Create a StringComparer an compare the hashes.
StringComparer comparer = StringComparer.OrdinalIgnoreCase;

if (0 == comparer.Compare(hashOfInput, hash))
{
return true;
}
else
{
return false;
}
}
}
}


و همین طور با این کد اطلاعات رو کد می کنم

textBox2.Text = security.Encrypt(security.m, textBox1.Text);

اما دیکریپتو نمی دونم چه جوریه

programerinfonet
جمعه 07 تیر 1392, 16:01 عصر
سوالم سخت بود ؟
یا کسی نمیخواد جواب ما رو بده
بابا دمتون گرم

Mahmoud.Afrad
جمعه 07 تیر 1392, 16:02 عصر
خودتون اینا رو نوشتید؟ اگر نه پس کسی که نوشته کاملا در اشتباه بوده و به همین دلیل نام نادرستی رو برای متدها انتخاب کرده. چون اصلا این متدهایی که گذاشتیذ هیچ ربطی به Encrypt\Decrypt ندارند.
متد اول رشته ورودی رو طبق md5 هش میکنه و متد دوم هم برای بررسی یک رشته با رشته هش شده است.
البته همونطور که حتما میدونید الگوریتم Hashing نباید قابل برگشت باشه.

یه سر به این تاپیک بزنید
http://barnamenevis.org/showthread.php?357912

fakhravari
جمعه 07 تیر 1392, 16:05 عصر
الگوریتم Hashing نباید قابل برگشت باشه = براي مقايسه به كار مياد.

اسم تابع هاي شما مفهوم ديگري داره.

programerinfonet
جمعه 07 تیر 1392, 16:06 عصر
من از این کد میخواستم واسه هاش کردن اطلاعات دیتابیسم استفاده کنم
یعنی راه منطقی نیست واسه افزایش امنیت داده ها ؟؟؟

Mahmoud.Afrad
جمعه 07 تیر 1392, 16:08 عصر
چه نوع داده ای؟

programerinfonet
جمعه 07 تیر 1392, 16:09 عصر
string
کلآ مقادیر ورودی که کاربر وارد می کنه
بانکم هم اکسس 2010

Mahmoud.Afrad
جمعه 07 تیر 1392, 16:12 عصر
نه منظورم این بود که این داده ها چی هستند. اگر برای یوزرنیم و پسورد میخوای آره Hash خوبه. منتها در این صورت دیگه نباید به دیکد کردن فکر کنید. باید اطلاعات ورودی توسط کاربر رو هش کنید و با اطلاعات داخل دیتابیس مقایسه کنید.
برای اطلاعات دیگه مثل آدرس ، شماره تلفن یا ایمیل میتونید از الگوریتم های Encrypt\Decrypt استفاده کنید.

fakhravari
جمعه 07 تیر 1392, 16:12 عصر
بستگي به شما داره.
مثلا يوزر پس از هش كردن استفاده ميكنن
اما پسورد ها و ديگر چيزارو مي تونيد كد -ديكد كنيد.
چون متن اونا قابل برگشت ميشه.

programerinfonet
جمعه 07 تیر 1392, 16:15 عصر
ممنون
میشه یک نمونه برای اینکریپت دیکریپت کردن واسم بذارید ؟

Mahmoud.Afrad
جمعه 07 تیر 1392, 18:15 عصر
using System;
using System.Text;
using System.Security.Cryptography;

class Rijndael_Encrypt_Decrypt
{
Rijndael RJ = Rijndael.Create();
MD5CryptoServiceProvider MD = new MD5CryptoServiceProvider();

private byte[] MD5Hash(string Value)
{
return MD.ComputeHash(ASCIIEncoding.ASCII.GetBytes(Value) );
}

public string Encrypt_Text(string Text_TO_Encrypt, string Key)
{
RJ.Key = MD5Hash(Key);
RJ.Mode = CipherMode.ECB;
byte[] To_Encrypt = Encoding.UTF8.GetBytes(Text_TO_Encrypt);
return Convert.ToBase64String(RJ.CreateEncryptor().Transf ormFinalBlock(To_Encrypt, 0, To_Encrypt.Length));
}

public string Decrypt_Text(string Encrypted_Text, string Key)
{
try
{
RJ.Key = MD5Hash(Key);
RJ.Mode = CipherMode.ECB;
byte[] To_Decrypt = Convert.FromBase64String(Encrypted_Text);
return ASCIIEncoding.UTF8.GetString(RJ.CreateDecryptor(). TransformFinalBlock(To_Decrypt, 0, To_Decrypt.Length));
}
catch (Exception)
{
throw new ArgumentException("Input key is invalid!", "Key");
}
}
}