using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
namespace SecurityExample.AES256Encryption
{
public class EncryptionLibrary
{
public static byte[] AES_Encrypt(byte[] bytesToBeEncrypted,
byte[] passwordBytes)
{
byte[] encryptedBytes = null;
byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
using (MemoryStream ms = new MemoryStream())
{
using (RijndaelManaged AES = new RijndaelManaged())
{
AES.KeySize = 256;
AES.BlockSize = 128;
var key = new
Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
AES.Key =
key.GetBytes(AES.KeySize / 8);
AES.IV =
key.GetBytes(AES.BlockSize / 8);
AES.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms,
AES.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
cs.Close();
}
encryptedBytes =
ms.ToArray();
}
}
return encryptedBytes;
}
public static byte[] AES_Decrypt(byte[] bytesToBeDecrypted,
byte[] passwordBytes)
{
byte[] decryptedBytes = null;
byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
using (MemoryStream ms = new MemoryStream())
{
using (RijndaelManaged AES = new RijndaelManaged())
{
AES.KeySize = 256;
AES.BlockSize = 128;
var key = new Rfc2898DeriveBytes(passwordBytes,
saltBytes, 1000);
AES.Key =
key.GetBytes(AES.KeySize / 8);
AES.IV =
key.GetBytes(AES.BlockSize / 8);
AES.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms,
AES.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
cs.Close();
}
decryptedBytes =
ms.ToArray();
}
}
return decryptedBytes;
}
public static string EncryptText(string input, string password = "E6t187^D43%F")
{
byte[] bytesToBeEncrypted = Encoding.UTF8.GetBytes(input);
byte[] passwordBytes =
Encoding.UTF8.GetBytes(password);
passwordBytes =
SHA256.Create().ComputeHash(passwordBytes);
byte[] bytesEncrypted =
AES_Encrypt(bytesToBeEncrypted, passwordBytes);
string result =
Convert.ToBase64String(bytesEncrypted);
return result;
}
public static string DecryptText(string input, string password = "E6t187^D43%F")
{
byte[] bytesToBeDecrypted = Convert.FromBase64String(input);
byte[] passwordBytes =
Encoding.UTF8.GetBytes(password);
passwordBytes =
SHA256.Create().ComputeHash(passwordBytes);
byte[] bytesDecrypted =
AES_Decrypt(bytesToBeDecrypted, passwordBytes);
string result =
Encoding.UTF8.GetString(bytesDecrypted);
return result;
}
public static class KeyGenerator
{
public static string GetUniqueKey(int maxSize = 15)
{
char[] chars = new char[62];
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
byte[] data = new byte[1];
using (RNGCryptoServiceProvider crypto = new
RNGCryptoServiceProvider())
{
crypto.GetNonZeroBytes(data);
data = new byte[maxSize];
crypto.GetNonZeroBytes(data);
}
StringBuilder result = new
StringBuilder(maxSize);
foreach (byte b in data)
{
result.Append(chars[b %
(chars.Length)]);
}
return result.ToString();
}
}
}
}
No comments:
Post a Comment