Первые 16 символов расшифровки-это мусор, остальные расшифрованы правильно!
Привет,
Я выполняю функции шифрования/дешифрования в клиентском / серверном приложении.
сервер отправляет зашифрованное значение клиенту.
ЗАПИСКА: Та часть, где я копирую зашифрованное значение в char *, решила проблему отправки значения клиенту с отсутствующим первым символом.
const char * Enc_Message2 = AES_Encrypt(Message2, Shared_Session_Key_S, I_V); cout<<"\n\nENCRYPTED MESSAGE2 {S,nb,ns}:"; cout<<"\n============================="<<"\r\n"<<Enc_Message2; //cout<<"\n\nSIZE OF ENCRYPTED MESSAGE2: "<<sizeof(Enc_Message2); //cout<<"\n\nSIZE OF ENCRYPTED MESSAGE2 {S,nb,ns}: "<<sizeof(Enc_Message2); int e = strlen(Enc_Message2); char * enc_msg2 = new char[e+1]; strcpy(enc_msg2, Enc_Message2); s5 =clientSock->SendString(enc_msg2); if (s5 != true) { std::cout << clientSock->lastErrorText() << "\r\n"; return; }
Затем клиент получает значение правильно и начинает его расшифровывать, но первые 16 символов являются мусором, а остальная часть расшифрованного значения является правильной.
const char * Recieved_Enc_Msg2 = 0; Recieved_Enc_Msg2 = socket.receiveString(); if (Recieved_Enc_Msg2 == 0 ) { std::cout << socket.lastErrorText(); return; } std::cout<<"\n\nRECIEVED MESSAGE2: "<<"\r\n"<<Recieved_Enc_Msg2; const char * Dec_Msg2 = AES_Decrypt(Recieved_Enc_Msg2, s_sessionKey, iv); cout<<"\n\nDECRYPTED MESSAGE2: "<<"\r\n"<<Dec_Msg2;
ниже приведен процесс расшифровки AES:
nst char * Client_Side::AES_Decrypt(const char * Enc_Msg2, const char * Client_sessionKey, const char * i_v) { CkCrypt2 decrypt; bool success = decrypt.UnlockComponent("****************"); if (success != true) { std::cout << decrypt.lastErrorText() << "\r\n"; //return; } // Decrypt something... decrypt.put_CryptAlgorithm("aes"); decrypt.put_KeyLength(128); decrypt.put_CipherMode("cbc"); decrypt.SetEncodedKey(Client_sessionKey,"base64"); decrypt.SetEncodedIV(i_v,"base64"); decrypt.put_EncodingMode("base64"); // Use an IV that is the MD5 hash of the session key... /* const char *iv = 0; iv = decrypt.hashStringENC(shared_secret_key_S); // AES uses a 16-byte IV: cout << "Initialization Vector:" << "\r\n"; cout << iv << "\r\n"; */ const char * Decrypted_Message2 ; //Decrypted_Message1 = decrypt.decryptEncoded(rec_enc_msg1); Decrypted_Message2 = decrypt.decryptStringENC(Enc_Msg2); cout <<"\n\nLength"<< strlen(Decrypted_Message2); return Decrypted_Message2; }
Что я уже пробовал:
1-попробовал скопировать const char * в новый char *, не получилось.