Перед запуском шифрования и дешифрования я хотел экспортировать и импортировать ключ.
Я' Я получаю сообщение об ошибке при попытке использовать «BCryptExportKey».
Найден код состояния: 3221225659 (
Код: Выделить всё
Hex - C00000BBЭтот код NTSTATUS означает «Запрос не поддерживается» (0xC00000BB — STATUS_NOT_SUPPORTED)
Ссылка: NTSTATUS
Но я не могу понять, почему возникла эта проблема.
Я не нашел никаких ресурсов/документации, связанных с этой проблемой.
Может ли кто-нибудь помочь мне с этим?
Код:
Код: Выделить всё
using System.Runtime.InteropServices;
using System.Text;
namespace TestConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
ExportImportKey();
}
internal static void ExportImportKey()
{
string keyString = "12345678abcdefgh"; // 16 byte
byte[] key = Encoding.UTF8.GetBytes(keyString);
byte[] exportedKey = ExportKey(key);
}
internal static byte[] ExportKey(byte[] key)
{
IntPtr phAlgorithm = IntPtr.Zero;
IntPtr hKey = IntPtr.Zero;
byte[] exportedKey = null;
uint statusCode = BCryptOpenAlgorithmProvider(out phAlgorithm, "AES", "Microsoft Primitive Provider", 0);
statusCode = BCryptGenerateSymmetricKey(phAlgorithm, out hKey, IntPtr.Zero, 0, key, key.Length, 0);
int keySize = 0;
statusCode = BCryptExportKey(hKey, IntPtr.Zero, "ECCPUBLICBLOB", null, 0, out keySize, 0);
exportedKey = new byte[keySize];
statusCode = BCryptExportKey(hKey, IntPtr.Zero, "KeyDataBlob", exportedKey, exportedKey.Length, out keySize, 0);
return exportedKey;
}
[DllImport("bcrypt.dll")]
public static extern uint BCryptOpenAlgorithmProvider(out IntPtr phAlgorithm, [MarshalAs(UnmanagedType.LPWStr)] string pszAlgId, [MarshalAs(UnmanagedType.LPWStr)] string pszImplementation, uint dwFlags);
[DllImport("bcrypt.dll")]
public static extern int BCryptCloseAlgorithmProvider(IntPtr phAlgorithm, int dwFlags);
[DllImport("bcrypt.dll")]
public static extern uint BCryptExportKey(IntPtr hKey, IntPtr hExportKey, string pszBlobType, byte[] pbOutput, int cbOutput, out int pcbResult, int dwFlags);
[DllImport("bcrypt.dll")]
public static extern uint BCryptGenerateSymmetricKey(IntPtr phAlgorithm, out IntPtr phKey, IntPtr pbKeyObject, int cbKeyObject, byte[] pbSecret, int cbSecret, int dwFlags);
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... texportkey