Я новичок в С++ и пытаюсь использовать библиотеку CryptoPP для шифрования AES. Я использую Cmake и импортирую библиотеку, используя следующие строки:
cmake_minimum_required(VERSION 3.15)
project(CryptoPP_Example_AES)
set(CMAKE_CXX_STANDARD 20)
add_executable(CryptoPP_Example_AES main.cpp)
find_library(CryptoPP libcryptopp.a REQUIRED)
target_link_libraries(CryptoPP_Example_AES ${CryptoPP})
Для информации я установил libcrypto++6 libcrypto++-dev libcrypto++dbg.
Таким образом, все работает нормально, и мой проект скомпилирован.
Проблема в том, что когда я пытаюсь скомпилировать его с помощью set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
MinGW, я больше не нахожу библиотеку.
Вот мой main.cpp:
#include <iostream>
#include "cryptopp/modes.h"
#include "cryptopp/aes.h"
#include "cryptopp/filters.h"
int main(int argc, char* argv[]) {
byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
memset( key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH );
memset( iv, 0x00, CryptoPP::AES::BLOCKSIZE );
//
// String and Sink setup
//
std::string plaintext = "Now is the time for all good men to come to the aide...";
std::string ciphertext;
std::string decryptedtext;
//
// Dump Plain Text
//
std::cout << "Plain Text (" << plaintext.size() << " bytes)" << std::endl;
std::cout << plaintext;
std::cout << std::endl << std::endl;
//
// Create Cipher Text
//
CryptoPP::AES::Encryption aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption( aesEncryption, iv );
CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink( ciphertext ) );
stfEncryptor.Put( reinterpret_cast<const unsigned char*>( plaintext.c_str() ), plaintext.length() + 1 );
stfEncryptor.MessageEnd();
//
// Dump Cipher Text
//
std::cout << "Cipher Text (" << ciphertext.size() << " bytes)" << std::endl;
for(char i : ciphertext) {
std::cout << "0x" << std::hex << (0xFF & static_cast<byte >(i)) << " ";
}
std::cout << std::endl << std::endl;
//
// Decrypt
//
CryptoPP::AES::Decryption aesDecryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, iv );
CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink( decryptedtext ) );
stfDecryptor.Put( reinterpret_cast<const unsigned char*>( ciphertext.c_str() ), ciphertext.size() );
stfDecryptor.MessageEnd();
//
// Dump Decrypted Text
//
std::cout << "Decrypted Text: " << std::endl;
std::cout << decryptedtext;
std::cout << std::endl << std::endl;
return 0;
}
Итак, когда я использую set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
, моя IDE говорит мне, что нет файлов заголовков cryptopp, как вы можете видеть на экране: IDE CLion сообщает мне, что нет файлов заголовков
Может ли кто-нибудь помочь мне в этом? Я долго искал в Интернете, но не нашел решения.
"/usr/lib/cryptopp/libcryptopp.a"
где вы установили свою версию cryptopp для mingw? - person Alan Birtles   schedule 23.02.2020/usr/lib/x86_64-linux-gnu/libcryptopp.so
: файл не распознан - person Laurent   schedule 23.02.2020set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++) target_include_directories(CryptoPP_Example_AES PUBLIC /usr/lib/cryptopp/include/) target_link_libraries(CryptoPP_Example_AES /usr/lib/cryptopp/libcryptopp.a)
Кажется, mingw нашел все, что мне нужно, но теперь я получил много неопределенных ссылок в main.cpp. - person Laurent   schedule 23.02.2020