У меня есть приложение 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?
Хм, вы собираетесь в порт криптографический код, связанных даже не понимая, что делает источник. Не имеет смысла с точки зрения безопасности ... –
Eugene, что бы я хотел сделать - замените оригинальные функции CryptoAPI аналогами из портативной библиотеки. И желательно, чтобы эта работа занимала как можно меньше времени. Это не критически важное приложение, а шифрование/дешифрование - это просто небольшая и не очень важная часть. – VitalyVal
это не имеет значения, важна безопасность. Вы просто не поправитесь, не понимая, что делаете. –