데스크톱 Windows 및 Windows Embedded/POSReady에서 잘 작동하는 RSA 공개 키 암호화 래퍼가 있습니다. 이 시스템을 Windows CE 5와 Windows CE 3 모두에 포팅해야합니다.이 시스템의 일부에서는 개발자가 여러 인코딩으로 인증서 및 키와 같은 다양한 암호화 개체를 가져올 수 있습니다. 가장 일반적으로 사용되는 인코딩은 Base64로 인코딩 된 PEM입니다. 대부분의 Windows 버전, Windows가 CryptDecodeObjectEx
호출에 필요한 바이너리 (DER) 형식으로 인코딩을 변환하기 쉽습니다 :Windows CE 3에서 PEM을 DER로 변환
bool MyClass::externalToBinary(const DATA_BLOB &in, DATA_BLOB &outDER)
{
DWORD flags;
// This call determines the format and how much memory is needed in outDER
if (::CryptStringToBinaryA(reinterpret_cast<char *>(in.pbData), in.cbData, CRYPT_STRING_ANY, NULL, &outDER.cbData, NULL, &flags) == false &&
::CryptStringToBinaryA(reinterpret_cast<char *>(in.pbData), in.cbData, CRYPT_STRING_HEX_ANY, NULL, &outDER.cbData, NULL, &flags) == false)
{
// Log errors here using ::GetLastError();
return false;
}
if ((outDER.pbData = new unsigned char[outDER.cbData]) == NULL)
{
// Log errors here using ::GetLastError();
return false;
}
return (::CryptStringToBinaryA(reinterpret_cast<char *>(in.pbData), in.cbData, flags, outDER.pbData, &outDER.cbData, NULL, NULL) != FALSE);
} // end externalToBinary
불행하게도, CryptStringToBinary
이의 CryptoAPI의 윈도우 CE 3의 버전에 존재하지 않습니다. 덜 인기있는 인코딩 (예 : 16 진수)에 대한 지원을 취소 할 수는 있지만 CE3 버전의 API에서 PEM 인코딩에 대한 지원을 제거하고 싶지는 않습니다.
누구나 Windows CE 3에서 작동 할 수있는 CryptStringToBinary
대체품이 있습니까? 이 API를 사용하는 개발자는 현재 OpenSSL을 종속성으로 갖고 있지 않으므로이를 위해 추가하지 않는 것이 좋습니다.