DocSpace-buildtools/common/ASC.Common/Security/Cryptography/InstanceCrypto.cs

52 lines
1.5 KiB
C#
Raw Normal View History

namespace ASC.Security.Cryptography;
[Singletone]
public class InstanceCrypto
{
private readonly byte[] _eKey;
2019-10-09 15:04:46 +00:00
2022-02-08 11:07:28 +00:00
public InstanceCrypto(MachinePseudoKeys machinePseudoKeys)
{
_eKey = machinePseudoKeys.GetMachineConstant(32);
2022-02-08 11:07:28 +00:00
}
2019-10-09 15:04:46 +00:00
2022-02-08 11:07:28 +00:00
public string Encrypt(string data)
{
return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(data)));
}
public byte[] Encrypt(byte[] data)
{
using var hasher = Aes.Create();
hasher.Key = _eKey;
hasher.IV = new byte[hasher.BlockSize >> 3];
2021-11-24 19:34:39 +00:00
using var ms = new MemoryStream();
using var ss = new CryptoStream(ms, hasher.CreateEncryptor(), CryptoStreamMode.Write);
using var plainTextStream = new MemoryStream(data);
plainTextStream.CopyTo(ss);
ss.FlushFinalBlock();
hasher.Clear();
return ms.ToArray();
}
public string Decrypt(string data) => Decrypt(Convert.FromBase64String(data));
public string Decrypt(byte[] data)
{
using var hasher = Aes.Create();
hasher.Key = _eKey;
hasher.IV = new byte[hasher.BlockSize >> 3];
using var msDecrypt = new MemoryStream(data);
using var csDecrypt = new CryptoStream(msDecrypt, hasher.CreateDecryptor(), CryptoStreamMode.Read);
using var srDecrypt = new StreamReader(csDecrypt);
2021-08-25 15:26:13 +00:00
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
return srDecrypt.ReadToEnd();
}
}