using System.Security.Cryptography;
public
class
EncryptionManager
{
private
static
byte[] _salt =
;
public
static
string EncryptStringAES(string plainText, string sharedSecret)
{
if
(string.IsNullOrEmpty(plainText) || string.IsNullOrEmpty(sharedSecret))
throw
new
ArgumentNullException();
using (
var
aesAlg =
new
RijndaelManaged())
{
using (
var
key =
new
Rfc2898DeriveBytes(sharedSecret, _salt))
{
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
}
var
encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (
var
msEncrypt =
new
MemoryStream())
{
using (
var
csEncrypt =
new
CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (
var
swEncrypt =
new
StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
}
return
Convert.ToBase64String(msEncrypt.ToArray());
}
}
}
public
static
string DecryptStringAES(string cipherText, string sharedSecret)
{
if
(string.IsNullOrEmpty(cipherText) || string.IsNullOrEmpty(sharedSecret))
throw
new
ArgumentNullException();
using (
var
aesAlg =
new
RijndaelManaged())
{
using (
var
key =
new
Rfc2898DeriveBytes(sharedSecret, _salt))
{
aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
}
var
cipherBytes = Convert.FromBase64String(cipherText);
using (
var
msDecrypt =
new
MemoryStream(cipherBytes))
{
aesAlg.IV = ReadByteArray(msDecrypt);
var
decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (
var
csDecrypt =
new
CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (
var
srDecrypt =
new
StreamReader(csDecrypt))
{
return
srDecrypt.ReadToEnd();
}
}
}
}
}
private
static
byte[] ReadByteArray(Stream s)
{
byte[] rawLength =
new
byte[sizeof(int)];
s.Read(rawLength, 0, rawLength.Length);
byte[] buffer =
new
byte[BitConverter.ToInt32(rawLength, 0)];
s.Read(buffer, 0, buffer.Length);
return
buffer;
}
}