2011-01-27 3 views
0

У меня есть приложение Windows (используется Visual Studio), который использует Microsoft CryptoAPI. Теперь необходимо разработать приложение Mac OS X , которое может считывать данные, зашифрованные WinApp, и шифровать данные в Mac OS X, которые будут расшифровываться WinApp. Шифрование/Decription в WinApp инициализируется в таком виде:Портирование Microsoft CryptoAPI на Mac OS

::CryptAcquireContext(&m_hCryptProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); 
::CryptCreateHash(m_hCryptProv, CALG_MD5, 0, 0, &m_hCryptHash); 
::CryptHashData(m_hCryptHash, pbtPSW, dwPSWLen, 0); 
::CryptDeriveKey(m_hCryptProv, CALG_RC4, m_hCryptHash, 0, &m_hCryptKey); 

И для шифрования/Decription используется следующее:

::CryptEncrypt(m_hCryptKey, 0, TRUE, 0, pBuf, &dwCnt, dwLen); 
::CryptDecrypt(m_hCryptKey, 0, TRUE, 0, pBuf, &dwCnt); 

Как я понимаю, мне нужно найти библиотеку, которая реализует MD5 хэширование плюс кодирование/декодирование RC4. Кажется, что есть такие библиотеки, как . Например: matrixSSL, OpenSSL. Но использование библиотек для моих щенков не является очевидным (особенно с учетом того, что я не знаком с интерфейсами Sequrity/Crypting ). Может ли кто-нибудь рекомендовать конкретную библиотеку шифрования? Май Есть ли примеры кода для моей задачи?

Сложение:

Кажется, главная проблема заключается в том, что мне нужен портативный аналог :: CryptDeriveKey, который совместим с версией Microsoft (то есть генерирует один и тот же ключ). Кто-нибудь знает такую? Или алгоритм создания ключа с помощью :: CryptDeriveKey?

+0

Хм, вы собираетесь в порт криптографический код, связанных даже не понимая, что делает источник. Не имеет смысла с точки зрения безопасности ... –

+0

Eugene, что бы я хотел сделать - замените оригинальные функции CryptoAPI аналогами из портативной библиотеки. И желательно, чтобы эта работа занимала как можно меньше времени. Это не критически важное приложение, а шифрование/дешифрование - это просто небольшая и не очень важная часть. – VitalyVal

+1

это не имеет значения, важна безопасность. Вы просто не поправитесь, не понимая, что делаете. –

ответ

1

Я бы порекомендовал взглянуть на встроенную библиотеку SSL CyaSSL. Он поддерживает существующие стандарты вплоть до TLS 1.2 и очень переносится в разных операционных системах. В частности, CyaSSL включает криптографическую библиотеку CTaoCrypt, которая должна позволить вам выполнять криптографические операции, которые вы ищете.

Некоторые полезные ссылки на документацию для CyaSSL:

CTaoCrypt Использование Ссылка: http://yassl.com/yaSSL/Docs_CTaoCrypt_Usage_Reference.html
CyaSSL Docs Страница: http://yassl.com/yaSSL/Docs.html

Если вы загружаете CyaSSL, вы сможете найти визуальный файл проекта студии, чтобы взять Посмотрите также.

С уважением,
Крис

+0

Спасибо Крису. Как я писал в дополнение к оригинальному сообщению, основной проблемой является реализация :: CryptDeriveKey точно так же, как и работа :: CryptDeriveKey. Из-за слабого оригинального подхода ключ не сохраняется в файле с зашифрованным файлом. Поэтому мне нужно воспроизвести процедуру генерации ключа (особенно: CryptDeriveKey). – VitalyVal

Смежные вопросы