PDA

View Full Version : رمزنگاری به روش md5 در سی شارپ



ابراهیم1
پنج شنبه 03 آذر 1390, 11:49 صبح
با سلام و عرض خسته نباشید
1-چطور می توان در صفحه ورودی password را کد کنیم(منظورم روش md5)

ardeshir1365
پنج شنبه 03 آذر 1390, 16:36 عصر
سلام

using System.Security.Cryptography;
private string encryptString(string strToEncrypt)
{
UTF8Encoding ue = new UTF8Encoding();
byte[] bytes = ue.GetBytes(strToEncrypt);

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] hashBytes = md5.ComputeHash(bytes);

// Bytes to string

return System.Text.RegularExpressions.Regex.Replace
(BitConverter.ToString(hashBytes), "-", "").ToLower();

}

private void button4_Click(object sender, EventArgs e)
{
textBox2.Text = encryptString(textBox1.Text);
}

mmd2009
پنج شنبه 03 آذر 1390, 17:28 عصر
با سلام

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


private void button1_Click(object sender, EventArgs e)
{
string str = "microsoft";

string resultMD5 = EncryptString(str);

// لطفا به سایت زیر برید
// http://www.md5decrypter.com/

// حالا مقدار رمزنگاری شده رو بذارید اونجا و کد رو وارد کنید و دکمه دیسکریپ رو بزنید

// چی میبینید ؟
}

private string EncryptString(string strToEncrypt)
{
var ue = new UTF8Encoding();
var bytes = ue.GetBytes(strToEncrypt);

var md5 = new MD5CryptoServiceProvider();
var hashBytes = md5.ComputeHash(bytes);

// Bytes to string

return System.Text.RegularExpressions.Regex.Replace
(BitConverter.ToString(hashBytes), "-", "").ToLower();

}

omidh2007
پنج شنبه 03 آذر 1390, 21:22 عصر
با سلام

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

// لطفا به سایت زیر برید
// http://www.md5decrypter.com/
// حالا مقدار رمزنگاری شده رو بذارید اونجا و کد رو وارد کنید و دکمه دیسکریپ رو بزنید
// چی میبینید ؟


من یه سر زدم به این سایت .
همه عبارت ها رو نمیتونه Dectypt کنه . از روی دیتابیس خودش چک میکنه .
اگه Hash توی دیتابیسش موجود نبود ، پیغام زیر رو میده .
A decryption for this hash wasn't found in our database

اگه روش یا encryption جایگزینی با الگوریتمش دارید بذارید ممنون میشم .

mmd2009
پنج شنبه 03 آذر 1390, 21:39 عصر
بله. ولی وقتی خود مایکروسافت میگه استفاده نکنید چرا باید استفاده بکنیم ؟ الگوریتم md5 مثل شلیک کردن در تاریکی هست.

البته به نظر من الگوریتمی خوبه که خودمون هم بهش تغییراتی بدیم. قرضا به این صورت :


private static readonly byte[] Salt = Encoding.ASCII.GetBytes("o6806642kbM7c5");


public static string EncryptStringAES(string plainText, string sharedSecret)
{
if (string.IsNullOrEmpty(plainText))
throw new ArgumentNullException("plainText");
if (string.IsNullOrEmpty(sharedSecret))
throw new ArgumentNullException("sharedSecret");

string outStr;
RijndaelManaged aesAlg = null;
try
{
// generate the key from the shared secret and the salt
var key = new Rfc2898DeriveBytes(sharedSecret, Salt);

// Create a RijndaelManaged object
// with the specified key and IV.
aesAlg = new RijndaelManaged();
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8);

// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

// Create the streams used for encryption.
using (var msEncrypt = new MemoryStream())
{
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (var swEncrypt = new StreamWriter(csEncrypt))
{

//Write all data to the stream.
swEncrypt.Write(plainText);
}
}
outStr = Convert.ToBase64String(msEncrypt.ToArray());
}
}
finally
{
// Clear the RijndaelManaged object.
if (aesAlg != null)
aesAlg.Clear();
}

// Return the encrypted bytes from the memory stream.
return outStr;
}

/// <summary>
/// Decrypt the given string. Assumes the string was encrypted using
/// EncryptStringAES(), using an identical sharedSecret.
/// </summary>
/// <param name="cipherText">The text to decrypt.</param>
/// <param name="sharedSecret">A password used to generate a key for decryption.</param>
public static string DecryptStringAES(string cipherText, string sharedSecret)
{
if (string.IsNullOrEmpty(cipherText))
throw new ArgumentNullException("cipherText");
if (string.IsNullOrEmpty(sharedSecret))
throw new ArgumentNullException("sharedSecret");

// Declare the RijndaelManaged object
// used to decrypt the data.
RijndaelManaged aesAlg = null;

// Declare the string used to hold
// the decrypted text.
string plaintext;

try
{
// generate the key from the shared secret and the salt
var key = new Rfc2898DeriveBytes(sharedSecret, Salt);

// Create a RijndaelManaged object
// with the specified key and IV.
aesAlg = new RijndaelManaged();
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
aesAlg.IV = key.GetBytes(aesAlg.BlockSize / 8);

// Create a decrytor to perform the stream transform.
var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
// Create the streams used for decryption.
var bytes = Convert.FromBase64String(cipherText);
using (var msDecrypt = new MemoryStream(bytes))
{
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (var srDecrypt = new StreamReader(csDecrypt))

// Read the decrypted bytes from the decrypting stream
// and place them in a string.
plaintext = srDecrypt.ReadToEnd();
}
}
}
finally
{
// Clear the RijndaelManaged object.
if (aesAlg != null)
aesAlg.Clear();
}

return plaintext;
}

ghasem110deh
دوشنبه 21 دی 1394, 00:46 صبح
سلام
شرمنده این تاپیک زیر خاکی رو میارم بالا !

این متغیر رشته ای "sharedSecret" چیه که در هر دو حالت EncryptStringAES و DecryptStringAES وجود داره (بعنوان ورودی)
مگه یه رشته نمیدیم و کدمیکنه و بعد رشته کد شده رو مگیریه و دیکد شده میده !؟
پس اون رشته دوم چیه ؟

habibb
سه شنبه 22 دی 1394, 07:58 صبح
سلام
شرمنده این تاپیک زیر خاکی رو میارم بالا !

این متغیر رشته ای "sharedSecret" چیه که در هر دو حالت EncryptStringAES و DecryptStringAES وجود داره (بعنوان ورودی)
مگه یه رشته نمیدیم و کدمیکنه و بعد رشته کد شده رو مگیریه و دیکد شده میده !؟
پس اون رشته دوم چیه ؟
سلام
sharedSecret همون password هست که کلید مشتق میشه از salt و Password.

public Rfc2898DeriveBytes(string password, byte[] salt);


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


namespace SUBS
{
internal class Cryptography
{
private const string PasswordHash = "P@@Sw0rd";
private const string SaltKey = "S@LT&KEY";
private const string VIKey = "@1B2c3D4e5F6g7H8";


public static string Encrypt(string plainText)
{
byte[] bytes1 = Encoding.UTF8.GetBytes(plainText);
//برای تولید کلیدهای قدرتمند Rfc2898DeriveBytes
byte[] bytes2 = new Rfc2898DeriveBytes("P@@Sw0rd", Encoding.ASCII.GetBytes("S@LT&KEY")).GetBytes(32);
RijndaelManaged rijndaelManaged = new RijndaelManaged();//الگوریتم AES
rijndaelManaged.Mode = CipherMode.CBC;
rijndaelManaged.Padding = PaddingMode.Zeros;
ICryptoTransform encryptor = rijndaelManaged.CreateEncryptor(bytes2, Encoding.ASCII.GetBytes("@1B2c3D4e5F6g7H8"));
byte[] inArray;
using (MemoryStream memoryStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream((Stream) memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(bytes1, 0, bytes1.Length);
cryptoStream.FlushFinalBlock();
inArray = memoryStream.ToArray();
cryptoStream.Close();
}
memoryStream.Close();
}
return Convert.ToBase64String(inArray);
}


public static string Decrypt(string encryptedText)
{
byte[] buffer = Convert.FromBase64String(encryptedText);
//برای تولید کلیدهای قدرتمند Rfc2898DeriveBytes
byte[] bytes = new Rfc2898DeriveBytes("P@@Sw0rd", Encoding.ASCII.GetBytes("S@LT&KEY")).GetBytes(32);
RijndaelManaged rijndaelManaged = new RijndaelManaged();//الگوریتم AES
rijndaelManaged.Mode = CipherMode.CBC;
rijndaelManaged.Padding = PaddingMode.None;
ICryptoTransform decryptor = rijndaelManaged.CreateDecryptor(bytes, Encoding.ASCII.GetBytes("@1B2c3D4e5F6g7H8"));
MemoryStream memoryStream = new MemoryStream(buffer);
CryptoStream cryptoStream = new CryptoStream((Stream) memoryStream, decryptor, CryptoStreamMode.Read);
byte[] numArray = new byte;
int count = cryptoStream.Read(numArray, 0, numArray.Length);
memoryStream.Close();
cryptoStream.Close();
return Encoding.UTF8.GetString(numArray, 0, count).TrimEnd("\0".ToCharArray());
}
}
}



__________________________________________________ _________________
آموزش HttpHandler در ASP.NET (http://barnamenevis.org/showthread.php?502216-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-HttpHandler-%D8%AF%D8%B1-ASP-NET)

دانلود و نصب ویزیویگ CKEditor و CKFinder برای ASP.NET (فعال نمودن آپلود عکس) (http://barnamenevis.org/showthread.php?478188-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D9%88-%D9%86%D8%B5%D8%A8-%D9%88%DB%8C%D8%B2%DB%8C%D9%88%DB%8C%DA%AF-CKEditor-%D9%88-CKFinder-%D8%A8%D8%B1%D8%A7%DB%8C-ASP-NET-(%D9%81%D8%B9%D8%A7%D9%84-%D9%86%D9%85%D9%88%D8%AF%D9%86-%D8%A2%D9%BE%D9%84%D9%88%D8%AF-%D8%B9%DA%A9%D8%B3))

[B]چطور اضافه کردن ویژگی SyntaxHighLighting در CKEditor برای ASP.NET با Syntaxhighlighter Interface (http://barnamenevis.org/showthread.php?478260-%DA%86%D8%B7%D9%88%D8%B1-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D9%88%DB%8C%DA%98%DA%AF%DB%8C-SyntaxHighLighting-%D8%AF%D8%B1-CKEditor-%D8%A8%D8%B1%D8%A7%DB%8C-ASP-NET-%D8%A8%D8%A7-Syntaxhighlighter-Interface)
از طرف حرکت جوهری (http://substantialmotion.ir/) برنامه نویس فوق حرفه ای (http://substantialmotion.ir/)http://www.forum.98ia.com/images/smilies/2/-2-32-.gif