Ошибка «Запрос не поддерживается» во время «BCryptExportKey»C#

Место общения программистов C#
Anonymous
Ошибка «Запрос не поддерживается» во время «BCryptExportKey»

Сообщение Anonymous »

Я пытаюсь использовать криптографическую операцию BCrypt (BCryptEncrypt, BCryptDecrypt).
Перед запуском шифрования и дешифрования я хотел экспортировать и импортировать ключ.
Я' Я получаю сообщение об ошибке при попытке использовать «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);
}
}
Предоставленный код состояния был обнаружен после вызова первого BCryptExportKey в данном коде.

Подробнее здесь: https://stackoverflow.com/questions/787 ... texportkey

Вернуться в «C#»