Un po' di esempi su come cifrare e decifrare dati in .NET:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace TestEncryptDecrypt
{
class Program
{
const String PASSWORD_HASH = "p@ssW0rd";
const String SALT_KEY = "s@l7_K&y";
const String VI_KEY = "@!2#&46%%64!@";
const String TRIPLE_DES_KEY = "23jiefjneu5474bcaio48rhe";
const String RSA_PRIVATE_KEY = "" +
"wVe/eITmOuNLD1oSUrOsQHvG11m/kQpxkbAPMZxXGNDmKqdLj3BdRYp35hjNGh" +
"CNR4l2dGy4+Y9HVo+tHwHiuoBoSYm3/79C2Ars3mue+MkWZ6gCdn21WHtUmMOLtqeNLrKzX" +
"WpihI7MzZbK9bFfHK9f4w+O/ssuGo2628VYE2M=" +
"AQAB" +
"7Tqlq/oXjTHWzmhNzbNOnBRaKotYZC/p4584ZSvlGjVkG7vdvuWFRe6gMkaOA1Zc9VVP" +
"pd+jHi6ihYN/WZbtKw==
" +
"0KQhxIC0zSQJKM2736fm8tiupnS9bTF/rg5YiY4NTbKLMNwJsg8rTWl27+knS6QDBUu/u"
+
"u182aTa6hPzozOGqQ==" +
"LiyAGp0vAFh3Cu3aVvNTlaWQdz9wEPASgi93dpm4mgVSWuOSIZni+t2baK267oNczJOy" +
"UQLaaQGCuKIDo5hwyQ==" +
"qMbNRh9zoqru+eILg65YJcTg62huP+GVzqBuQL/3xQ2UiW7GLRMWTWXuP77U+dxwUR1o" +
"uPcaUxmHuWlwYmnxGQ==" +
"etPo41x9UGcYrsVaMeMsTTvUT9l5bYFigkWfkP1nGHwlzi/7FJjs38D6KoglPd" +
"eU7HYhnc76ud3VMDBbXldIZw==" +
"MgsHSSeE++sG65NRuMw+onYnMmhNeDouyRm75QhlVswDNzkUCq13xt8fR5RVyhBMsR54Z" +
"YwamKWoPlRz59myGEZqFx13RM0ztMZNhWU13ts4CA8401LnaqhZjmJcZSJgIDfKlc+YyMyGG" +
"g+2e4S8NEfIOLw7+/PSuWYqnh2C4rE=" +
"";
const String RSA_PUBLIC_KEY = "" +
"wVe/eITmOuNLD1oSUrOsQHvG11m/kQpxkbAPMZxXGNDmKqdLj3BdRYp35hjNGhCN" +
"R4l2dGy4+Y9HVo+tHwHiuoBoSYm3/79C2Ars3mue+MkWZ6gCdn21WHtUmMOLtqeNLrKzXWpih" +
"I7MzZbK9bFfHK9f4w+O/ssuGo2628VYE2M=" +
"AQAB" +
"";
static void Main(string[] args)
{
String plainText = "prova di cifratura stringa 1 &^'-_=";
String encrypt = EncryptRijndael(plainText);
String decrypt = DecryptRijndael(encrypt);
encrypt = EncryptTripleDES(plainText);
decrypt = DecryptTripleDES(encrypt);
encrypt = EncryptRSA(plainText);
decrypt = DecryptRSA(encrypt);
String hash = GetMd5Hash(plainText);
}
public static string EncryptRijndael(string plainText)
{
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
using (Rfc2898DeriveBytes rfc2898DeriveBytes =
new Rfc2898DeriveBytes(PASSWORD_HASH, Encoding.ASCII.GetBytes(SALT_KEY)))
{
byte[] keyBytes = rfc2898DeriveBytes.GetBytes(256 / 8);
using (var symmetricKey =
new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.Zeros })
{
var encryptor = symmetricKey.CreateEncryptor(keyBytes, Encoding.ASCII.GetBytes(VI_KEY));
byte[] cipherTextBytes;
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream =
new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
cipherTextBytes = memoryStream.ToArray();
}
}
return Convert.ToBase64String(cipherTextBytes);
}
}
}
public static string DecryptRijndael(string encryptedText)
{
byte[] cipherTextBytes = Convert.FromBase64String(encryptedText);
using (Rfc2898DeriveBytes rfc2898DeriveBytes =
new Rfc2898DeriveBytes(PASSWORD_HASH, Encoding.ASCII.GetBytes(SALT_KEY)))
{
byte[] keyBytes = rfc2898DeriveBytes.GetBytes(256 / 8);
using (var symmetricKey =
new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.None })
{
var decryptor = symmetricKey.CreateDecryptor(keyBytes, Encoding.ASCII.GetBytes(VI_KEY));
using (var memoryStream = new MemoryStream(cipherTextBytes))
{
using (var cryptoStream =
new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
byte[] plainTextBytes = new byte[cipherTextBytes.Length];
int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount).TrimEnd("\0".ToCharArray());
}
}
}
}
}
public static string EncryptTripleDES(string plainText)
{
using (TripleDESCryptoServiceProvider des =
new TripleDESCryptoServiceProvider())
{
des.Mode = CipherMode.ECB;
des.Key = System.Text.Encoding.ASCII.GetBytes(TRIPLE_DES_KEY);
des.Padding = PaddingMode.PKCS7;
using (ICryptoTransform DESEncrypt = des.CreateEncryptor())
{
Byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(plainText);
return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}
}
}
public static string DecryptTripleDES(string encryptedText)
{
using (TripleDESCryptoServiceProvider des =
new TripleDESCryptoServiceProvider())
{
des.Mode = CipherMode.ECB;
des.Key = System.Text.Encoding.ASCII.GetBytes(TRIPLE_DES_KEY);
des.Padding = PaddingMode.PKCS7;
using (ICryptoTransform DESEncrypt = des.CreateDecryptor())
{
Byte[] Buffer = Convert.FromBase64String(encryptedText.Replace(" ", "+"));
return Encoding.UTF8.GetString(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}
}
}
static String EncryptRSA(String plainText)
{
Byte[] bytes = System.Text.Encoding.Unicode.GetBytes(plainText);
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(RSA_PUBLIC_KEY);
return Convert.ToBase64String(rsa.Encrypt(bytes, false));
}
}
static String DecryptRSA(String ciphertext)
{
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(RSA_PRIVATE_KEY);
Byte[] decrypt = rsa.Decrypt(Convert.FromBase64String(ciphertext), false);
return System.Text.Encoding.Unicode.GetString(decrypt);
}
}
static string GetMd5Hash(string input)
{
using (MD5 md5Hash = MD5.Create())
{
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
sBuilder.Append(data[i].ToString("x2"));
return sBuilder.ToString();
}
}
}
}
TestEncryptDecrypt.zip