Winify – Blame information for rev 28

Subversion Repositories:
Rev:
Rev Author Line No. Line
14 office 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. //
5 ///////////////////////////////////////////////////////////////////////////
6  
7 using System.IO;
8 using System.Linq;
9 using System.Security.Cryptography;
10  
11 namespace Winify.Utilities
12 {
13 public static class AES
14 {
15 #region Static Fields and Constants
16  
17 private const int AESKeySaltBytes = 16;
18  
19 private static readonly RNGCryptoServiceProvider Rng = new RNGCryptoServiceProvider();
20  
21 #endregion
22  
23 #region Public Methods
24  
25 ///////////////////////////////////////////////////////////////////////////
26 // Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 //
27 ///////////////////////////////////////////////////////////////////////////
28 public static byte[] Encrypt(byte[] plain, string password)
29 {
30 using (var rijndael = Rijndael.Create())
31 {
32 rijndael.BlockSize = 128;
33 rijndael.Mode = CipherMode.CBC;
34 rijndael.KeySize = 256;
35 rijndael.Padding = PaddingMode.PKCS7;
36 var salt = new byte[AESKeySaltBytes];
37 Rng.GetBytes(salt);
38 var pdb = new Rfc2898DeriveBytes(password, salt, 1000);
39 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8);
40 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8);
41  
42 using (var memoryStream = new MemoryStream())
43 {
44 using (var cryptoStream =
28 office 45 new CryptoStream(memoryStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write))
14 office 46 {
47 cryptoStream.Write(plain, 0, plain.Length);
48 cryptoStream.Close();
49  
50 var ciphertext = memoryStream.ToArray();
51  
52 return salt.Concat(ciphertext)
53 .ToArray();
54 }
55 }
56 }
57 }
58  
59 ///////////////////////////////////////////////////////////////////////////
60 // Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3 //
61 ///////////////////////////////////////////////////////////////////////////
62 public static byte[] Decrypt(byte[] cipher, string password)
63 {
64 using (var rijndael = Rijndael.Create())
65 {
66 rijndael.BlockSize = 128;
67 rijndael.Mode = CipherMode.CBC;
68 rijndael.KeySize = 256;
69 rijndael.Padding = PaddingMode.PKCS7;
70  
71 var salt = cipher.Take(16)
72 .ToArray();
73  
74 var ciphertext = cipher.Skip(16)
75 .ToArray();
76  
77 var pdb = new Rfc2898DeriveBytes(password, salt, 1000);
78 rijndael.Key = pdb.GetBytes(rijndael.KeySize / 8);
79 rijndael.IV = pdb.GetBytes(rijndael.BlockSize / 8);
80  
81 using (var memoryStream = new MemoryStream())
82 {
83 using (var cryptoStream =
28 office 84 new CryptoStream(memoryStream, rijndael.CreateDecryptor(), CryptoStreamMode.Write))
14 office 85 {
86 cryptoStream.Write(ciphertext, 0, ciphertext.Length);
87 cryptoStream.Close();
88  
89 return memoryStream.ToArray();
90 }
91 }
92 }
93 }
94  
95 #endregion
96 }
97 }