2011-05-07 6 views
1

최근에 AES256을 사용하여 데이터를 암호화/해독하는 서버를 만들었습니다. 제대로 보내려면 시간이 걸렸습니다. 그러나 이제는 메모리가 부족하다고 생각하는 문제가 있습니다. "hello"라는 단어를 보내면 벌금을 해독합니다. "helloo"를 보내면 벌금이 해지됩니다. "helloo"보다 암호 해독 중에 오류가 발생하고 암호화 된 문자열을 인쇄하면받은 문자열에 이전 문자열의 길이를 더한 값이 더해집니다.암호 해독 메모리 문제

예컨대

hello: #################### 
helloo: ############################## 
hi:  #####(#########################) //has the additional length made up from the encrypted string of "helloo" minus the first however many characters "hi" is 

코드 :

std::string decryptString(std::string ciphertext, byte *key, byte *iv) 
{ 
    std::string decodedtext; 
    CryptoPP::StringSource(ciphertext, true, 
          new CryptoPP::HexDecoder(new CryptoPP::StringSink(decodedtext))); 

    std::string plaintext; 

    CryptoPP::GCM<CryptoPP::AES>::Decryption dec; 
    dec.SetKeyWithIV((const byte *)key, CryptoPP::AES::MAX_KEYLENGTH, 
        (const byte *)iv, CryptoPP::AES::BLOCKSIZE); 

    CryptoPP::AuthenticatedDecryptionFilter adf(dec, new CryptoPP::StringSink(plaintext)); 

    adf.Put((const byte *)decodedtext.data(), decodedtext.size()); 
    adf.MessageEnd(); 

    return plaintext; 
} 
+0

시도하지만, 코드없이 ... 하드 이제 – DarkSquirrel42

+1

을 말해 ** 암호화를 수행하는 코드를 게시 할 수 있습니다. – QuantumMechanic

+0

decryptString (...)을 호출하는 코드를 표시 할 수 있습니까? 나는'cyphertext'가 새로운 문자열을 넣을 때 여전히 이전 문자열을 포함한다고 생각합니다 ... 새로운 문자열 – DarkSquirrel42

답변

1

코드에서 메모리 오류를 찾기 위해 Valgrind의를 사용해보십시오.

아, 팁 : 코드 자체를 게시하면 더 흥미로운 해답이 될 수 있습니다.

+0

내가 언급 한 내용을 사용 해보고, 코드를 게시물에 추가했습니다. – Jim

0

항상이 초기화 벡터를이 메서드에 전달하면 그 이유가 그럴 수 있습니다. ** 난 당신이 암호화 된 출력에 대한 귀하의 버퍼를 초기화하지 않습니다 추측에는 요

dec.Resynchronize(iv);