Add crypto class
This commit is contained in:
parent
556996d904
commit
1ad691ad99
81
Misc/Crypto.cs
Normal file
81
Misc/Crypto.cs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
|
||||||
|
namespace CC_Functions.Misc
|
||||||
|
{
|
||||||
|
public static class Crypto
|
||||||
|
{
|
||||||
|
public static byte[] Encrypt(byte[] data, byte[] key)
|
||||||
|
{
|
||||||
|
if (key is null)
|
||||||
|
throw new ArgumentException("Key must have valid value.", nameof(key));
|
||||||
|
if (data is null)
|
||||||
|
throw new ArgumentException("The text must have valid value.", nameof(data));
|
||||||
|
|
||||||
|
byte[] buffer = data;
|
||||||
|
SHA512CryptoServiceProvider hash = new SHA512CryptoServiceProvider();
|
||||||
|
byte[] aesKey = new byte[24];
|
||||||
|
Buffer.BlockCopy(hash.ComputeHash(key), 0, aesKey, 0, 24);
|
||||||
|
|
||||||
|
using Aes aes = Aes.Create();
|
||||||
|
if (aes == null)
|
||||||
|
throw new ArgumentException("Parameter must not be null.", nameof(aes));
|
||||||
|
|
||||||
|
aes.Key = aesKey;
|
||||||
|
|
||||||
|
using ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
|
||||||
|
using MemoryStream resultStream = new MemoryStream();
|
||||||
|
using (CryptoStream aesStream = new CryptoStream(resultStream, encryptor, CryptoStreamMode.Write))
|
||||||
|
{
|
||||||
|
using MemoryStream plainStream = new MemoryStream(buffer);
|
||||||
|
plainStream.CopyTo(aesStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] result = resultStream.ToArray();
|
||||||
|
byte[] combined = new byte[aes.IV.Length + result.Length];
|
||||||
|
Array.ConstrainedCopy(aes.IV, 0, combined, 0, aes.IV.Length);
|
||||||
|
Array.ConstrainedCopy(result, 0, combined, aes.IV.Length, result.Length);
|
||||||
|
|
||||||
|
return combined;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] Decrypt(byte[] encrypted, byte[] key)
|
||||||
|
{
|
||||||
|
if (key is null)
|
||||||
|
throw new ArgumentException("Key must have valid value.", nameof(key));
|
||||||
|
if (encrypted is null)
|
||||||
|
throw new ArgumentException("The encrypted text must have valid value.", nameof(encrypted));
|
||||||
|
|
||||||
|
byte[] combined = encrypted;
|
||||||
|
byte[] buffer = new byte[combined.Length];
|
||||||
|
SHA512CryptoServiceProvider hash = new SHA512CryptoServiceProvider();
|
||||||
|
byte[] aesKey = new byte[24];
|
||||||
|
Buffer.BlockCopy(hash.ComputeHash(key), 0, aesKey, 0, 24);
|
||||||
|
|
||||||
|
using Aes aes = Aes.Create();
|
||||||
|
if (aes == null)
|
||||||
|
throw new ArgumentException("Parameter must not be null.", nameof(aes));
|
||||||
|
|
||||||
|
aes.Key = aesKey;
|
||||||
|
|
||||||
|
byte[] iv = new byte[aes.IV.Length];
|
||||||
|
byte[] ciphertext = new byte[buffer.Length - iv.Length];
|
||||||
|
|
||||||
|
Array.ConstrainedCopy(combined, 0, iv, 0, iv.Length);
|
||||||
|
Array.ConstrainedCopy(combined, iv.Length, ciphertext, 0, ciphertext.Length);
|
||||||
|
|
||||||
|
aes.IV = iv;
|
||||||
|
|
||||||
|
using ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
|
||||||
|
using MemoryStream resultStream = new MemoryStream();
|
||||||
|
using (CryptoStream aesStream = new CryptoStream(resultStream, decryptor, CryptoStreamMode.Write))
|
||||||
|
{
|
||||||
|
using MemoryStream plainStream = new MemoryStream(ciphertext);
|
||||||
|
plainStream.CopyTo(aesStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultStream.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -115,5 +115,7 @@ namespace CC_Functions.Misc
|
|||||||
|
|
||||||
public static Rectangle Round(this RectangleF self) => Rectangle.Round(self);
|
public static Rectangle Round(this RectangleF self) => Rectangle.Round(self);
|
||||||
public static Rectangle Ceiling(this RectangleF self) => Rectangle.Ceiling(self);
|
public static Rectangle Ceiling(this RectangleF self) => Rectangle.Ceiling(self);
|
||||||
|
public static byte[] Encrypt(this byte[] self, byte[] key) => Crypto.Encrypt(self, key);
|
||||||
|
public static byte[] Decrypt(this byte[] self, byte[] key) => Crypto.Decrypt(self, key);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -93,9 +93,9 @@ Win32_NetworkAdapterConfiguration:MACAddress";
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] EncryptLocal(byte[] unencrypted) =>
|
public static byte[] EncryptLocal(byte[] unencrypted) =>
|
||||||
ProtectedData.Protect(unencrypted, Value, DataProtectionScope.CurrentUser);
|
Crypto.Encrypt(unencrypted, Value);
|
||||||
|
|
||||||
public static byte[] DecryptLocal(byte[] encrypted) =>
|
public static byte[] DecryptLocal(byte[] encrypted) =>
|
||||||
ProtectedData.Unprotect(encrypted, Value, DataProtectionScope.CurrentUser);
|
Crypto.Decrypt(encrypted, Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user