summaryrefslogtreecommitdiff
path: root/Gestor.Common/Gestor.Common.Helpers/EncryptionHelper.cs
blob: 5b982d0cdff2757040cf2c15db65f31800dedcd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace Gestor.Common.Helpers;

public static class EncryptionHelper
{
	private static readonly byte[] Salt = new byte[16]
	{
		38, 220, 255, 0, 173, 237, 122, 238, 197, 254,
		7, 175, 77, 8, 34, 60
	};

	private static readonly string EncryptionKey = $"aGG3r{1012}#w3BDz$";

	public static string Encrypt(this string plain)
	{
		return Convert.ToBase64String(Encoding.UTF8.GetBytes(plain).EncryptBytes());
	}

	public static byte[] EncryptBytes(this byte[] plainTextBytes)
	{
		using Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(EncryptionKey, Salt);
		using Rijndael rijndael = Rijndael.Create();
		rijndael.Key = rfc2898DeriveBytes.GetBytes(32);
		rijndael.IV = rfc2898DeriveBytes.GetBytes(16);
		using MemoryStream memoryStream = new MemoryStream();
		using CryptoStream cryptoStream = new CryptoStream(memoryStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write);
		cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
		cryptoStream.FlushFinalBlock();
		return memoryStream.ToArray();
	}

	public static string Decrypt(this string cipher)
	{
		if (string.IsNullOrEmpty(cipher))
		{
			return null;
		}
		try
		{
			byte[] array = Convert.FromBase64String(cipher);
			if (array.Length < 16)
			{
				return cipher;
			}
			byte[] array2 = array.DecryptBytes();
			return (array2 == null) ? cipher : Encoding.UTF8.GetString(array2);
		}
		catch (Exception)
		{
			return cipher;
		}
	}

	public static byte[] DecryptBytes(this byte[] plainTextBytes)
	{
		try
		{
			using Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(EncryptionKey, Salt);
			using Rijndael rijndael = Rijndael.Create();
			rijndael.Key = rfc2898DeriveBytes.GetBytes(32);
			rijndael.IV = rfc2898DeriveBytes.GetBytes(16);
			using MemoryStream memoryStream = new MemoryStream();
			using CryptoStream cryptoStream = new CryptoStream(memoryStream, rijndael.CreateDecryptor(), CryptoStreamMode.Write);
			cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
			cryptoStream.FlushFinalBlock();
			return memoryStream.ToArray();
		}
		catch (Exception)
		{
			return null;
		}
	}
}