CryptImportKey принимает не ключ, а PUBLIC KEY BLOB. Вам необходимо сформировать блоб из частей вашего RSA ключа.
Public Key Blob — это массив состоит из трех частей:
1) BLOBHEADER blobheader;
http://msdn.microsoft.com/en-us/library/windows/desktop/aa387453%28v=vs.85%29.aspx
2) RSAPUBKEY rsapubkey;
http://msdn.microsoft.com/en-us/library/windows/desktop/aa387685%28v=vs.85%29.aspx
3) BYTE modulus[rsapubkey.bitlen/8];
Пример блоба:
blobheader.bType = PUBLICKEYBLOB; // 0x06 тип блоба, не меняется
blobheader.bVersion = CUR_BLOB_VERSION; // 0x02 версия блоба, не меняется
blobheader.reserved = 0; // 0x0000 зарезервировано, не меняется
blobheader.aiKeyAlg = CALG_RSA_KEYX; // 0x0000a400 id алгоритма CALG_RSA_KEYX (RSA public-key key exchange). Возможно его будет нужно поменять на 0x00002400(CALG_RSA_SIGN)
rsapubkey.magic = 0x31415352; // константа обозначающая RSA
rsapubkey.bitlen = 512; // 0x00000200 длина модуля в битах
rsapubkey.pubexp = 65537; // 0x00010001 публичная экспонента
modulus[rsapubkey.bitlen/8]; // модуль
Здесь есть еще проблема в формате, в каком формате Big-Endian или Little-Endian представлены у вас ключи, т.е. возможно вам придется перевернуть модуль и/или экспоненту.
После того как использовали ключ и он вам больше не нужен, то нужно вызвать CryptDestroyKey.