none
Ошибка вызова функции CryptDecrypt (Win32) RRS feed

  • Вопрос

  • Привет!

    Я пытаюсь выполнить следующую штуку:

    1. Импортировать открытый ключ (у меня есть экспортированная ранее ключевая пара, так вот импортирую я открытый ключ)

    2. Расшифровать строку (зашифрована RSA)

    При этом я не хочу использовать хранилище ключей. Необходимо

    1. Импортировать ключ

    2. Расшифровать

    3. Удалить ключ, чтобы он больше нигде не хранился и не использовался.

     

    Получаю CSP таким образом:

    if not CryptAcquireContext(@Result, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) then RaiseLastOSError;

    При вызове функции CryptDecrypt появляется ошибка:

    ---------------------------
    Project1
    ---------------------------
    System Error.  Code: -2146893811.

    Ключ не существует.
    ---------------------------
    ОК  
    ---------------------------

    Мне кажется, что я как-то неправильно работаю с хранилищем ключей. Почему ключ не найден, когда я непосредственно перед вызовом CryptDecrypt произвожу успешный импорт ключа ч/з функцию CryptImportKey:

    if not CryptImportKey(Prov, PByte(Stream.Memory), Stream.Size, 0, 0,
          @PublicKey) then RaiseLastOSError;

    А вот вызов CryptDecrypt, на котором все валится

    if not CryptDecrypt(PublicKey, 0, True, 0, PByte(Str), @BufLen) then
            RaiseLastOSError;

    • Перемещено I.Vorontsov 19 мая 2010 г. 11:24 (От:Разработка Windows-приложений)

Ответы

Все ответы

  •  

    Вообще, если я собираюсь импортировать ключевые пары, могу ли я получать контекст криптопровайдера с пармаетром CRYPT_VERIFYCONTEXT, или это ошибка?

  • У вас не задано название контейнера с ключом. Вы хотите создать новый ключ или использовать существующий?
    • Помечено в качестве ответа Abolmasov Dmitry 29 июня 2011 г. 9:45
    17 сентября 2010 г. 0:20