· 8 years ago · Dec 18, 2017, 10:14 PM
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6using System.Security.Cryptography;
7using System.IO;
8
9namespace Common
10{
11 public class Encryption
12 {
13 //Admin password Test123
14 public string HashString(string mytext)
15 {
16 SHA256 myAlg = SHA256.Create();//initialize the algorithm instance
17
18 byte[] input = Encoding.UTF32.GetBytes(mytext); //converting from string to byte[]
19 byte[] digest = myAlg.ComputeHash(input); //converting from string to byte[]
20
21 return Convert.ToBase64String(digest); //converting back from byte[] to string
22 }
23
24 public SymetricParamaters GenerateSymmetricParamaters(string input)
25 {
26 Rfc2898DeriveBytes rfc = new Rfc2898DeriveBytes(input, new byte[] { 20, 255, 1, 60, 54, 78, 52, 30 });
27
28 Rijndael myAlg = Rijndael.Create();
29
30 SymetricParamaters myParams = new SymetricParamaters()
31 {
32 SecretKey = rfc.GetBytes(myAlg.KeySize / 8),
33 IV = rfc.GetBytes(myAlg.BlockSize / 8)
34 };
35
36 return myParams;
37 }
38
39 //Still needs to be implemented in Index.cshtml
40 public string EncryptString(string input, string passwordToBeUsedInSecretKey)
41 {
42 SymetricParamaters myParameters = GenerateSymmetricParamaters(passwordToBeUsedInSecretKey);
43
44 Rijndael myAlg = Rijndael.Create();
45 myAlg.Key = myParameters.SecretKey;
46 myAlg.IV = myParameters.IV;
47
48 byte[] clearDataAsBytes = Encoding.UTF32.GetBytes(input);
49
50 MemoryStream msClearData = new MemoryStream(clearDataAsBytes);
51 CryptoStream cs = new CryptoStream(msClearData, myAlg.CreateEncryptor(), CryptoStreamMode.Read);
52
53 MemoryStream msEncrypteData = new MemoryStream();
54 cs.CopyTo(msEncrypteData);
55
56 byte[] encrypteDataAsBytes = msEncrypteData.ToArray();
57 string encrypteddata = Convert.ToBase64String(encrypteDataAsBytes); //converting to string the cryptographic data
58
59 encrypteddata = encrypteddata.Replace('=', '|');
60 encrypteddata = encrypteddata.Replace('/', '_');
61 encrypteddata = encrypteddata.Replace('+', '*');
62
63 return encrypteddata;
64 }
65
66 public string DecryptString(string input, string passwordToBeUsedInSecretKey)
67 {
68
69 input = input.Replace('|', '=');
70 input = input.Replace('_', '/');
71 input = input.Replace('*', '+');
72
73 //Need to change below
74 SymetricParamaters myParameters = GenerateSymmetricParamaters(passwordToBeUsedInSecretKey);
75
76 Rijndael myAlg = Rijndael.Create();
77 myAlg.Key = myParameters.SecretKey;
78 myAlg.IV = myParameters.IV;
79
80 byte[] encryptedDataAsBytes = Convert.FromBase64String(input); //Make decoding;
81
82 MemoryStream msEncryptedData = new MemoryStream(encryptedDataAsBytes);
83 CryptoStream cs = new CryptoStream(msEncryptedData, myAlg.CreateDecryptor(), CryptoStreamMode.Read);
84
85 MemoryStream msClearData = new MemoryStream();
86 cs.CopyTo(msClearData);
87
88 byte[] clearDataAsBytes = msClearData.ToArray();
89 string clearData = Encoding.UTF32.GetString(clearDataAsBytes); //converting to string the cryptographic data
90
91 return clearData;
92 }
93 }
94
95 public class SymetricParamaters
96 {
97 public byte[] SecretKey { get; set; }
98 public byte[] IV { get; set; }
99
100 }
101}