/Cryptography/AES.cs |
@@ -8,11 +8,12 @@ |
using System.Collections.Generic; |
using System.IO; |
using System.Linq; |
using System.Threading.Tasks; |
using System.Security.Cryptography; |
|
namespace wasSharpNET.Cryptography |
{ |
public class AES |
public static class AES |
{ |
private const int AES_BLOCK_SIZE = 128; |
private const CipherMode AES_CIPHER_MODE = CipherMode.CBC; |
@@ -30,7 +31,7 @@ |
/// <param name="key">the encryption key</param> |
/// <param name="separator">the separator to use between the cyphertext and the IV</param> |
/// <returns>Base64 encoded encrypted data</returns> |
public string wasAESEncrypt(string data, string key, string separator = ":") |
public static async Task<string> Encrypt(string data, string key, string separator = ":") |
{ |
using (var rijdanelManaged = new RijndaelManaged()) |
{ |
@@ -46,7 +47,6 @@ |
rijdanelManaged.Key = derivedKey.GetBytes(rijdanelManaged.KeySize / 8); |
rijdanelManaged.IV = derivedKey.GetBytes(rijdanelManaged.BlockSize / 8); |
|
byte[] encryptedData; |
using (var encryptor = rijdanelManaged.CreateEncryptor(rijdanelManaged.Key, rijdanelManaged.IV)) |
{ |
using (var memoryStream = new MemoryStream()) |
@@ -55,13 +55,12 @@ |
{ |
using (var streamWriter = new StreamWriter(cryptoStream)) |
{ |
streamWriter.Write(data); |
await streamWriter.WriteAsync(data); |
return string.Join(separator, Convert.ToBase64String(salt), Convert.ToBase64String(memoryStream.ToArray())); |
} |
} |
encryptedData = memoryStream.ToArray(); |
} |
} |
return string.Join(separator, Convert.ToBase64String(salt), Convert.ToBase64String(encryptedData)); |
} |
} |
|
@@ -78,7 +77,7 @@ |
/// <param name="key">the encryption key</param> |
/// <param name="separator">the separator to use between the cyphertext and the IV</param> |
/// <returns>the decrypted data</returns> |
public string wasAESDecrypt(string data, string key, string separator = ":") |
public static async Task<string> Decrypt(string data, string key, string separator = ":") |
{ |
// retrieve the salt from the data. |
var segments = new List<string>(data.Split(new[] {separator}, StringSplitOptions.None)); |
@@ -85,7 +84,6 @@ |
if (!segments.Count().Equals(2)) |
throw new ArgumentException("Invalid data."); |
|
string plaintext; |
using (var rijdanelManaged = new RijndaelManaged()) |
{ |
// FIPS-197 / CBC |
@@ -106,13 +104,12 @@ |
{ |
using (var streamReader = new StreamReader(cryptoStream)) |
{ |
plaintext = streamReader.ReadToEnd(); |
return await streamReader.ReadToEndAsync(); |
} |
} |
} |
} |
} |
return plaintext; |
} |
} |
} |