سلام
بهترین کلاس این الگوریتم را میخواستم میشه معرفی کنید
ممنون
سلام
بهترین کلاس این الگوریتم را میخواستم میشه معرفی کنید
ممنون
/// <summary> /// Encrypt a string using dual encryption method. Return a encrypted cipher Text
/// </summary>
/// <param name="toEncrypt">string to be encrypted</param>
/// <param name="useHashing">use hashing? send to for extra secirity</param>
/// <returns></returns>
public string Encrypt(string toEncrypt, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
string key = "Key for Crypt";
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key ));
hashmd5.Clear();
}
else
keyArray = UTF8Encoding.UTF8.GetBytes(key);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
tdes.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
/// <summary>
/// DeCrypt a string using dual encryption method. Return a DeCrypted clear string
/// </summary>
/// <param name="cipherString">encrypted string</param>
/// <param name="useHashing">Did you use hashing to encrypt this data? pass true is yes</param>
/// <returns></returns>
public string Decrypt(string cipherString, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = Convert.FromBase64String(cipherString);
string key = "Key for Crypt";
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key ));
hashmd5.Clear();
}
else
keyArray = UTF8Encoding.UTF8.GetBytes(key);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
tdes.Clear();
return UTF8Encoding.UTF8.GetString(resultArray);
}
نمیدونم بهترین هست یا نه
فقط اون key رو باید کلید crypt, decrypt بزاری
یعنی aes که میگن همین چند خط کده
اخه توی اینترنت خیلی گشتم و کلاسش خیلی طولانی تره مثل اینکه
سلام میتونید اینجا به صورت خیلی ساده و همراه با مثال الگوریتمشو یاد بگیرید !
یعنی کلاسش همینه و در پروژم همین را کپی کنم ؟
ولی یه چیزی منا گیج کرده
لینک های زیر را ببینید:
http://www.codeproject.com/Articles/...rary-with-Salt
http://stackoverflow.com/questions/2...ion-in-c-sharp
از RijndaelManaged استفاده کردن این پس چیه؟
توضیحات بیشتر در مورد رمزنگاری AES رو میتونید تو همین فروم ، در این لینک ببینید ولی من یه خلاصه براتون میزارم :
الگوریتم AES ، الگوریتمی است برای رمزنگاری که به روش متقارن کار میکنه ، یعنی با کلیدی که داده ها رمز میشن ، با همون کلید داده ها زمزگشایی میشن ،
این الگوریتم در واقع همان الگوریتم Rijndael هست که بعد از استاندارد سازی به نام AES (Advanced Encryption Standard) تغییر نام داد...
فضای کلید رمزنگاری این الگوریتم 128 بیتی هست و به همین دلیل دور زدن این الگورتم را کاری بسیار سخت میکنه ...
این الگوریتم برای جایگزینی الگوریتم DES ارائه داده شد ، به این دلیل که الگوریتم DES توسط دولت فدرال آمریکا به همراه IBM ابداع شده بود و حس میشد دارای back door می تواند باشد...
آخرین ویرایش به وسیله Mahmoud.Afrad : پنج شنبه 12 شهریور 1394 در 18:40 عصر
ممنون
فقط ورودی ایناه بایت میخوان
حالا من چطوری رشته خودم و کلید خودم که به صورت رشته هستند را به صورت بایت ارسال کنم؟
وبرای رمزگشایی هم همینطور؟
static byte[] GetBytes(string str)
{
byte[] bytes =new byte[str.Length*sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(),0, bytes,0, bytes.Length);
return bytes;
}
static string GetString(byte[] bytes)
{
char[] chars =new char[bytes.Length/sizeof(char)];
System.Buffer.BlockCopy(bytes,0, chars,0, bytes.Length);
return new string(chars);
}
برای رمز نگاری فایل ها هم از همین استفاده میشه؟یا باید کدها را عوض کنیم؟
اینIV چی هستش؟
آخرین ویرایش به وسیله negar.rafie : پنج شنبه 12 شهریور 1394 در 14:27 عصر
برای رمز نگاری فایل ها با استفاده از Aes Encryption باید یه خورده اون کد رو تغییر بدید ، به این صورت که همه ی بایت هارو از فایل بخونه و اونارو رمزنگاری کنه و بعد از رمزنگاری ، بایت های تغییر داده شده رو بنویسه !
IV فلسفه ش طولانیه ، من یه خلاصه براتون میزارم ، منبع رو هم میزارم واسه اطلاعات بیشتر اگه خواستید میتونید مطالعه کنید :
داشتن هر IV منحصر به فرد در هر فایل (یا رشته) رمز نگاری شده بسیار مهمه و مهم تر اینه که برای هر فایل رمزنگاری شده نباید از یک IV استفاده کرد ! و اگر IV برای عملیات دیکد کردن به صورت غلط وارد شه ممکنه فایل (یا رشته) تولیدی درست نباشه !
پس برای رمزنگاری باید هر جفتشون رو داشته باشید و حتمن به صورت تصادفی یک IV منحصر بفرد برای هر فایل(یا رشته) ایجاد کنید
برای اطلاعات بیشتر میتونید به این لینک مراجعه کنید
خب حالا با این حساب پیاده سازی کلاس یکم سخت شد
میشه کلاس را راه اندازی کنید که رشته و کلید و iv را بگیره و رشته رزم شده بده و دیکد کنه؟
سلام مثال استفاده شده در لینکی که تو پست چهار دادم رو اینجا براتون کپی میکنم :
using System;
using System.IO;
using System.Security.Cryptography;
namespace Aes_Example
{
class AesExample
{
public static void Main()
{
try
{
string original = "Here is some data to encrypt!";
// Create a new instance of the Aes
// class. This generates a new key and initialization
// vector (IV).
using (Aes myAes = Aes.Create())
{
// Encrypt the string to an array of bytes.
byte[] encrypted = EncryptStringToBytes_Aes(original,
myAes.Key, myAes.IV);
// Decrypt the bytes to a string.
string roundtrip = DecryptStringFromBytes_Aes(encrypted,
myAes.Key, myAes.IV);
//Display the original data and the decrypted data.
Console.WriteLine("Original: {0}", original);
Console.WriteLine("Round Trip: {0}", roundtrip);
}
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e.Message);
}
}
static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key,
byte[] IV)
{
// Check arguments.
if (plainText == null || plainText.Length <= 0)
throw new ArgumentNullException("plainText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("Key");
byte[] encrypted;
// Create an Aes object
// with the specified key and IV.
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key
, aesAlg.IV);
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt
, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(
csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
}
// Return the encrypted bytes from the memory stream.
return encrypted;
}
static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key
, byte[] IV)
{
// Check arguments.
if (cipherText == null || cipherText.Length <= 0)
throw new ArgumentNullException("cipherText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("Key");
// Declare the string used to hold
// the decrypted text.
string plaintext = null;
// Create an Aes object
// with the specified key and IV.
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
// Create a decrytor to perform the stream transform.
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key
, aesAlg.IV);
// Create the streams used for decryption.
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt
, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(
csDecrypt))
{
// Read the decrypted bytes from the decrypting
stream
// and place them in a string.
plaintext = srDecrypt.ReadToEnd();
}
}
}
}
return plaintext;
}
}
}
یه خورده جستجو کنید مطالب خیلی خوبی از این روش رمزنگاری گیرتون میاد ، هم فارسی هم انگلیسی...
+++++++++++++++++++++++++++++++
یه چیز دیگه هم بگم : این الگوریتم روش پیاده سازیش تقریبن همینه که بالا گذاشتم ، اساس همه پیاده سازی ها اینه که بایت رو بگیری رمز نگاری کنه ببره به خروجی و عملیات معمکوسش !
خوب الان کلید و iv کجا وارد میشه؟
من این را پیدا کردم؟
http://www.aspsnippets.com/Articles/...and-VBNet.aspx
حالا یکی از اساتید لطف کنه پاسخ بده
مشکلی نداره
از همین میشه داخل پروژه های بزرگ و مهم استفاده کرد؟
این چطور
http://www.codeproject.com/Articles/...rary-with-Salt
این را امتحان کردم فقط رشته را رمز میکنه و با هر رمزی هم رمزگشایی میکنه
http://www.codeproject.com/Articles/...rary-with-Salt
پس این به چه کاری میاد؟
با سلام
این سورس رو براتون آماده کردم ببینید
اگه مشکلی بود همینجا مطرح کنید !
رمزنگاری فایل جواب نمیده
مثلا یه فیلم 1 گیگبایت را رمزنگاری میکنم خطای کمبود حافظه میده
چکار کنیم
برای رمزنگاری فایل های حجیم باید یکم کد را تغییر بدید
لینک های شما را من مشاهده کردم و در واقع قالب کار با AES همینه و مشکلی هم ندارند ولی در سایتهای های مختلف هر سایتی مثلا keysize را یه طور مقدار داده و تفاوت های اینگونه
من قبلا یه کلاس برای AES پیاده سازی کردم و در داخل سی شارپ استفاده کردم
و مواردی مثل:
رمزنگاری فایل برای ذخیره در دیتابیس(که بررسی شده فایل های بیشتر از 1 مگابایت رمزنگاری نشوند و ذخیره نشوند در دیتابیس)
رمز نگاری فایل های حجیم برای ذخیره در دیسک
رمزنگاری رشته
و . . .
قبلا برای چندتا از دوستان در سایت فرستادم
فکر کنم قبلا به من ایمیل زدید و ایمیل شما را دارم الان براتون ارسال میکنم