Цифровая подпись в CryptoAPI
От: Budet  
Дата: 19.11.02 17:51
Оценка:
Пытаюсь разобраться в механизме работы CryptoAPI. В частности, интересует создание цифровой подписи. Вопрос по поводу исходников, распространяемых в качестве примера. В проекте Encfile программе в качестве входных данных при шифровании необходимо передать имя файла с каким-то ключом для чтения. Непонятно, зачем нужен этот ключ и откуда получить файл.
Заранее благодарен.
Re: Цифровая подпись в CryptoAPI
От: Lexey Россия  
Дата: 20.11.02 07:57
Оценка: 3 (1)
Здравствуйте, Budet, Вы писали:

B>Пытаюсь разобраться в механизме работы CryptoAPI. В частности, интересует создание цифровой подписи. Вопрос по поводу исходников, распространяемых в качестве примера. В проекте Encfile программе в качестве входных данных при шифровании необходимо передать имя файла с каким-то ключом для чтения. Непонятно, зачем нужен этот ключ и откуда получить файл.


На вход подается открытый ключ RSA1024. Он используется при экспорте симметричного ключа 3DES.
Сгенерировать его можно с помощью примера rsakg.
Re[2]: Цифровая подпись в CryptoAPI
От: Budet  
Дата: 20.11.02 09:20
Оценка:
Здравствуйте, Lexey, Вы писали:

B>>Пытаюсь разобраться в механизме работы CryptoAPI. В частности, интересует создание цифровой подписи. Вопрос по поводу исходников, распространяемых в качестве примера. В проекте Encfile программе в качестве входных данных при шифровании необходимо передать имя файла с каким-то ключом для чтения. Непонятно, зачем нужен этот ключ и откуда получить файл.


L>На вход подается открытый ключ RSA1024. Он используется при экспорте симметричного ключа 3DES.

L>Сгенерировать его можно с помощью примера rsakg.

Спасибо! На соседнем компьютере всё работает.
Однако пример rsakg у меня выдает, что не может создать контекст. Я так понимаю, что это связано с типом используемого криптопровайдера, который на моей машине не поддерживается. Как это можно исправить?
Re[3]: Цифровая подпись в CryptoAPI
От: Lexey Россия  
Дата: 20.11.02 09:35
Оценка: 2 (1)
Здравствуйте, Budet, Вы писали:

B>Спасибо! На соседнем компьютере всё работает.

B>Однако пример rsakg у меня выдает, что не может создать контекст. Я так понимаю, что это связано с типом используемого криптопровайдера, который на моей машине не поддерживается. Как это можно исправить?

Поставить high encryption pack (если это Win2k) или IE6.
Re[4]: Цифровая подпись в CryptoAPI
От: Budet  
Дата: 20.11.02 12:10
Оценка:
Все работает, но никак не могу разобраться.
У меня задача такая: зашифровать файл закрытым ключом, а расшифровать открытым на другом компьютере. Ну то есть создать ЭЦП. Я так понимаю проект Encfile это не совсем то, что нужно, т.к. он при дешифрации пытается получить закрытый ключ. Как мне быть?
Re[5]: Цифровая подпись в CryptoAPI
От: Lexey Россия  
Дата: 20.11.02 12:20
Оценка: 3 (1)
Здравствуйте, Budet, Вы писали:

B>У меня задача такая: зашифровать файл закрытым ключом, а расшифровать открытым на другом компьютере. Ну то есть создать ЭЦП. Я так понимаю проект Encfile это не совсем то, что нужно, т.к.


ЭЦП, как правило, не шифрует файл. Шифруется только хэш.

>он при дешифрации пытается получить закрытый ключ. Как мне быть?


Там ключ нужен для расшифровки ключа шифрования. ЭЦП в encfile есть, но она использует те ключи, что хранятся в контейнере криптопровайдера. Соответсвенно, чтобы сделать то, что тебе хочется, нужно просто добавить экспорт/импорт открытого ключа ЭЦП.
Re[6]: Цифровая подпись в CryptoAPI
От: Budet  
Дата: 20.11.02 16:08
Оценка:
У меня функция CryptSignHash выдает ошибку NTE_BAD_KEYSET. В MSDN среди возвращаемых значений ничего не написано про этот код ошибки. Функция CryptAcquireContext проходит нормально:

    const char* CONT_NAME = "A4ENCRYPT_CONT_NAME";
    HCRYPTPROV hProv;
    if(!::CryptAcquireContext(&hProv,CONT_NAME,MS_ENHANCED_PROV,PROV_RSA_FULL,CRYPT_NEWKEYSET)) 
    {
        TRACE("Can't get context\n");
        return false;
    }


После работы я контекст удаляю:


    if(!::CryptAcquireContext(&hProv,CONT_NAME,MS_ENHANCED_PROV,PROV_RSA_FULL,CRYPT_DELETEKEYSET)) 
    {
        TRACE("Error while deleting context\n");
    }


В чем может быть причина?
Re[7]: Цифровая подпись в CryptoAPI
От: Lexey Россия  
Дата: 20.11.02 16:13
Оценка:
Здравствуйте, Budet, Вы писали:

B>У меня функция CryptSignHash выдает ошибку NTE_BAD_KEYSET. В MSDN среди возвращаемых значений ничего не написано про этот код ошибки. Функция CryptAcquireContext проходит нормально:


А ключи ты сгенерировать не забываешь?
Re[8]: Цифровая подпись в CryptoAPI
От: Budet  
Дата: 20.11.02 16:32
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Здравствуйте, Budet, Вы писали:


B>>У меня функция CryptSignHash выдает ошибку NTE_BAD_KEYSET. В MSDN среди возвращаемых значений ничего не написано про этот код ошибки. Функция CryptAcquireContext проходит нормально:


L>А ключи ты сгенерировать не забываешь?


Я генерирую симметричный ключ на основе пароля и случайный ассиметричный. Или их еще кроме создания надо импортить?
Re[9]: Цифровая подпись в CryptoAPI
От: Lexey Россия  
Дата: 25.11.02 13:46
Оценка:
Здравствуйте, Budet, Вы писали:

B>Я генерирую симметричный ключ на основе пароля и случайный ассиметричный. Или их еще кроме создания надо импортить?


Если генерируешь в том же контексте, то не надо. Приведи весь код целиком.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.