رمزنگاری(Encrypt)یک رشته (String)
private Byte[] KEY = { 0x54, 0x54, 0x98, 079, 0x35, 0x48, 0x97, 0x12 };
private Byte[] IV = { 0x08, 0x19, 0x24, 0x87, 0x39, 0x43, 0x16, 0x71, 0x38, 0x62, 0x93, 0x55, 0x29, 0x32, 0x95, 0x97 };
public String Encrypt(String Text)
{
if (Text != "")
{
try
{
Byte[] TextBytes = Encoding.UTF8.GetBytes(Text);
RijndaelManaged rijKey = new RijndaelManaged();
rijKey.Mode = CipherMode.CBC;
ICryptoTransform encryptor = rijKey.CreateEncryptor(KEY, IV);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
cryptoStream.Write(TextBytes, 0, TextBytes.Length);
cryptoStream.FlushFinalBlock();
Byte[] cipherTextBytes = memoryStream.ToArray();
memoryStream.Close();
cryptoStream.Close();
String cipherText = Convert.ToBase64String(cipherTextBytes);
Text = "";
rijKey.Clear();
encryptor.Dispose();
memoryStream.Dispose();
cryptoStream.Dispose();
return cipherText;
}
catch
{
String t = "";
return t;
}
}
else
{
return Text;
}
}
توضیح کدهای بالا :
Byte[] TextBytes = Encoding.UTF8.GetBytes(Text);
رشته ارسالی به تابع را با فرمت UTF8 به آرایه ای از Byte تبدیل می کند.
RijndaelManaged rijKey = new RijndaelManaged();
ساختن یک شی از نوع کلاس RijndaelManaged که یکی از کلاسهای رمز نگاری است.
rijKey.Mode = CipherMode.CBC;
انتخاب نوع رمز نگاری
ICryptoTransform encryptor = rijKey.CreateEncryptor(KEY, IV);
یک تابع مترجم رمزنگار تعریف می کند که با استفاده از Key و IV کار رمزنگاری را انجام می دهد.
MemoryStream memoryStream = new MemoryStream();
تعریف یک MemoryStream جهت قراردادن داده رمز شده در آن.
CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
کلاس CryptoStream با دریافت memoryStream، تابع رمز نگار و نوع عملیات ساخته می شود.
cryptoStream.Write(TextBytes, 0, TextBytes.Length);
تابع write از شیء cryptoStream با گرفتن رشته ای که می خواهد رمز شود، مبدا شروع و انتهای رشته آن را رمز کرده و در بافر قرار می دهد.
cryptoStream.FlushFinalBlock();
رشته رمز شده را که در بافر قرار دارد در memoryStream که در سازنده تحویل گرفته بود قرار داده و بافر را خالی می کند.
Byte[] cipherTextBytes = memoryStream.ToArray();
محتویات memoryStream را بصورت آرای از بایت در متغییر cipherTextBytes قرار می دهد.