1
我是新的cryptopp,我嘗試加密和解密文件中的文本。 我送花兒給人收到內存位置0x0012efe4此錯誤CryptoPP :: InvalidCiphertext只是這些行後:InvalidCiphertext excpetion
CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink(decryptedtext));
stfDecryptor.Put(reinterpret_cast<const unsigned char*>(ciphertext.c_str()), ciphertext.length());
stfDecryptor.MessageEnd();
加密/解密代碼:
BOOL Encryption()
{
// Key and IV setup
byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
memset(key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH);
memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);
HW_PROFILE_INFO hwProfileInfo;
GetCurrentHwProfile(&hwProfileInfo);
(hwProfileInfo.szHwProfileGuid, strlen(hwProfileInfo.szHwProfileGuid), key);
(hwProfileInfo.szHwProfileGuid, strlen(hwProfileInfo.szHwProfileGuid), iv);
// String and Sink setup
string STRING;
ifstream infile;
infile.open ("test2.txt");
getline(infile,STRING, '\0'); // Saves the line in STRING.
char cFilm[1000];
strcpy(cFilm,STRING.c_str());
infile.close();
std::string plaintext = cFilm;
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
ofstream write ("test2a.txt", ios::out | ios::binary);
int at = ciphertext.length()+ 1;
write.write(ciphertext.c_str(),at);
write.close();
ciphertext.erase();
remove("test2.txt");
rename("test2a.txt","c:\\test2.txt");
return 0;
}
BOOL Decryption()
{
// Key and IV setup
byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
memset(key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH);
memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);
HW_PROFILE_INFO hwProfileInfo;
GetCurrentHwProfile(&hwProfileInfo);
// String and Sink setup
string STRING2;
ifstream infile2;
infile2.open ("test2.txt",ios::binary);
getline(infile2,STRING2, '\0'); // Saves the line in STRING.
char cFilm2[1000];
strcpy(cFilm2,STRING2.c_str());
infile2.close();
std::string ciphertext (cFilm2);
std::string decryptedtext;
// 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.length());
stfDecryptor.MessageEnd();
// Dump Decrypted Text
ofstream write ("test2a.txt", ios::out | ios::binary);
write << decryptedtext;
write.close();
decryptedtext.erase();
remove("test2.txt");
rename("test2a.txt","test2.txt");
return 0;
}
任何人知道如何解決這個問題?
我欠你一杯啤酒! 謝謝! – TrockFOx 2013-02-24 19:49:26
好吧,威士忌更多我的事...但啤酒會在一個捏! :-)很高興它有幫助。 – Fraser 2013-02-24 22:13:47
您應該將Fraser的答案標記爲解決方案,以便訪問該頁面的其他人知道它的正確性。 – jww 2013-10-02 08:05:06