Функция расшифровки возвращает мусор ! ! !
Привет,
Я выполняю процесс шифрования/дешифрования AES (используя функции шифрования Chilkat AES).
Результат шифрования выполняется плавно и передается от клиента на сервер.
Проблема заключается в функции дешифрования, каждый раз, когда функция пытается расшифровать полученный зашифрованный результат, она возвращает мусор!!!!
Хотя я убедился, что необходимые параметры (используемые в функции шифрования) верны, такие как вектор инициализации, общий секретный ключ и даже свойства одинаковы.
ЗАПИСКА: вектор инициализации добавляется (открытым текстом) к зашифрованному сообщению и отправляется на сервер. Как только он достигает серверной части,он отделяется от зашифрованного сообщения до выполнения следующей функции дешифрования. Таким образом, он идентичен тому, который используется в шифровании.
ниже приведена функция шифрования, которая работает правильно:
const char * Client_Side::AES_Encrypt(const char * msg1, const char * C_sessionKey, const char * ivector) { CkCrypt2 crypt; bool success = crypt.UnlockComponent("****************"); if (success != true) { std::cout << crypt.lastErrorText() << "\r\n"; //return; } // Encrypt something... crypt.put_CryptAlgorithm("aes"); crypt.put_KeyLength(128); crypt.put_CipherMode("cbc"); crypt.SetEncodedKey(C_sessionKey,"base64"); crypt.SetEncodedIV(ivector,"base64"); crypt.put_EncodingMode("base64"); // Encrypt some text: const char *cipherText64 = 0; cipherText64 = crypt.encryptStringENC(msg1); std::cout <<"\n\nENCRYPTED MESSAGE1: "<< cipherText64 << "\r\n"; return cipherText64;}
ниже приведен код расшифровки, который возвращает мусор:
const char * Server_Side::AES_Decrypt(const char * Enc_Msg1, const char * SrvSessionKey ,const char * iv) { CkCrypt2 decrypt; bool success = decrypt.UnlockComponent("******************"); if (success != true) { std::cout << decrypt.lastErrorText() << "\r\n"; } // Decrypt something... decrypt.put_CryptAlgorithm("aes"); decrypt.put_KeyLength(128); decrypt.put_CipherMode("cbc"); decrypt.SetEncodedKey(SrvSessionKey,"base64"); decrypt.SetEncodedIV(iv,"base64"); decrypt.put_EncodingMode("base64"); std::cout<<"\nKEY: "<<SrvSessionKey; std::cout<<"\nIV: "<< iv; std::cout<<"\nMESSAGE TO BE DECRYPTED:"<<"\r\n"<<Enc_Msg1; const char * Decrypted_Message1 = 0; Decrypted_Message1 = decrypt.decryptStringENC(Enc_Msg1); std::cout <<"\n\nDecrypted_Message1:"<<"\r\n"<<Decrypted_Message1; std::cout <<"\n\nLength"<< strlen(Decrypted_Message1); return Decrypted_Message1; }
Пожалуйста, мне нужна помощь с этим.
Что я уже пробовал:
1-я пробовал поставить функцию дешифрования в основную, но все равно не получилось.
2-Убедитесь, что вектор инициализации и общий секретный ключ идентичны.
3-изменен режим кодирования в обеих функциях, не работает.
4-triedd, генерирующий общий секретный ключ в рамках одной и той же функции дешифрования, не сработал.