• XSS.stack #1 – первый литературный журнал от юзеров форума

Проблема шифрования CryptoAPI и расшифровки OpenSSL

GlowingOne

HDD-drive
Забанен
Регистрация
01.08.2020
Сообщения
37
Реакции
13
Пожалуйста, обратите внимание, что пользователь заблокирован
Я шифрую с помощью функции CryptEncrypt, использую RSA с заполнением OAEP, переворачиваю байты зашифрованного файла, но когда я пытаюсь расшифровать файл с помощью openSSL, он говорит, что произошла ошибка при декодировании OAEP.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Там нужно конвертировать несколько раз (PEM->DER->криптоапи), CryptDecodeObjectEx и еще что-то. Когда-то кодил такое, как найду - скину.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Код:
  if (!CryptEncrypt(RSAPubKey, NULL, 1, CRYPT_OAEP, *Data, &Size, BufLen))
             {
                 return 0;
             }
             *RevData= new BYTE[Size];
             ReverseStream(*Data, *RevData, Size);
             DWORD EncDataSize = Size;
             if (!CryptBinaryToStringA(*RevData, EncKeySize, CRYPT_STRING_BASE64, NULL, &Size))
             {
                 return 0;
             }
OpenSSL problem:
Код:
openssl rsautl -inkey private.pem -in file.enc -out file.txt -oaep -decrypt
cykas.png

я импортирую ключ таким образом:
Код:
if(!CryptStringToBinaryA(PubKeyString, 0, CRYPT_STRING_BASE64HEADER,derPubKey, &derPubKeyLen,NULL,NULL))
             return 0;
         if(!CryptDecodeObjectEx(X509_ASN_ENCODING, X509_PUBLIC_KEY_INFO, derPubKey, derPubKeyLen,
             CRYPT_ENCODE_ALLOC_FLAG, NULL, &publicKeyInfo, &publicKeyInfoLen))
             return 0;
         if(!CryptAcquireContext(&hProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
             return 0;
         if (!CryptImportPublicKeyInfo(hProv, X509_ASN_ENCODING, publicKeyInfo, &RSAPubKey))
             return 0;
         delete[] publicKeyInfo;
ReverseStream
Код:
void ReverseStream(LPBYTE Source, LPBYTE Destination, DWORD Size)
{
    int SourceCnt = Size;
    int DestCnt = 0;

    for (SourceCnt = Size - 1, DestCnt = 0; SourceCnt >= 0; SourceCnt--, DestCnt++)
        Destination[DestCnt] = Source[SourceCnt];
}
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Quake3
CryptImportPublicKeyInfo должен автоматически декодировать ключ, поэтому должен работать только один вызов CryptDecodeObjectEx.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх