A titkosítás egy nehéz feladat tud lenni kezdőknek és haladóknak is egyaránt. Velem is többször előfordult, hogy C#-ban valamit titkosítani kelletett, éppen ezért írtam egy kis osztályt ami kihasználja az osztályok bővíthetőségét és beszúrja az Encrypt() meg Decrypt() függvényeket a System.String osztályba. Így bármilyen stringre meg lehet majd őket hívni.
A függvények a .Net Framework beépített AES 256 bites algoritmust használják CBC módban és PBKDF2-t jelszó generáláshoz.
public static class EncryptionExtensions
{
public static string Encrypt(this string secret, string password)
{
var raw = Encoding.UTF8.GetBytes(secret);
var pdb = new Rfc2898DeriveBytes(password,
new byte[]
{
0x20, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
0x72, 0x6f, 0x6c, 0x69, 0x73, 0x6f, 0x66, 0x74, 0x2e,
0x6e, 0x65, 0x74, 0x2f, 0x20, 0x3b, 0x29, 0x20, 0x20
});
var ms = new MemoryStream();
var alg = Rijndael.Create();
alg.Mode = CipherMode.CBC;
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
var cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(raw, 0, raw.Length);
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
public static string Decrypt(this string secret, string password)
{
var enc = Convert.FromBase64String(secret);
var pdb = new Rfc2898DeriveBytes(password,
new byte[]
{
0x20, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f,
0x72, 0x6f, 0x6c, 0x69, 0x73, 0x6f, 0x66, 0x74, 0x2e,
0x6e, 0x65, 0x74, 0x2f, 0x20, 0x3b, 0x29, 0x20, 0x20
});
var ms = new MemoryStream();
var alg = Rijndael.Create();
alg.Mode = CipherMode.CBC;
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
var cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(enc, 0, enc.Length);
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
}
Használatuk egyszerű, a kód bemásolása után bármilyen stringre meghívhatod őket:
var secretMessage = "Árvíztűrő-tükörfúrógép";
var encryptedMesssage = secretMessage.Encrypt("fl00d-t0l3r4nt m1rr0r dr1ll");
// encryptedMessage = "5qB0JeE+gk+qcT505YwftIxQDnHzhZ/rROW/JGBLbxE="
var decryptedMessage = encryptedMessage.Decrypt("fl00d-t0l3r4nt m1rr0r dr1ll");
// decryptedMessage = "Árvíztűrő-tükörfúrógép"
lab.rolisoft.net