我正在做这个任务,我遇到了这个问题,如果我输入一个句子,例如:“你好我的名字是亚当”,它只会加密“你好”..但是当我把句子分配给明文,我得到一个完整的加密/解密句子。
AutoSeededRandomPool rnd;
// Generate a random key
SecByteBlock key(0x00, AES::DEFAULT_KEYLENGTH);
rnd.GenerateBlock( key, key.size() );
// Generate a random IV
SecByteBlock iv(AES::BLOCKSIZE);
rnd.GenerateBlock(iv, iv.size());
// Read phrase
std::string plaintext;
cin >> plaintext;
std::string ciphertext;
std::string decryptedtext;
// encrypt
CTR_Mode<AES>::Encryption cfbEncryption(key, key.size(), iv);
CryptoPP::StreamTransformationFilter stfEncryptor(cfbEncryption, new CryptoPP::StringSink( ciphertext ) );
stfEncryptor.Put( reinterpret_cast<const unsigned char*>( plaintext.c_str() ), plaintext.length() + 1 );
stfEncryptor.MessageEnd();
cout << ciphertext << endl;
// decrypt
CTR_Mode<AES>::Decryption cfbDecryption(key, key.size(), iv);
CryptoPP::StreamTransformationFilter stfDecryptor(cfbDecryption, new CryptoPP::StringSink( decryptedtext ) );
stfDecryptor.Put( reinterpret_cast<const unsigned char*>( ciphertext.c_str() ), ciphertext.size() );
stfDecryptor.MessageEnd();
cout << decryptedtext << endl;
有人可以解释..?我不太明白这是如何工作的......我需要用户输入这个作业。有没有办法让我可以获得用户输入并获得完整的加密句子?
答案 0 :(得分:3)
而不是cin >> plaintext
,请尝试std::getline(cin, plaintext)
。
operator>>
将一直读到下一个空格,在这种情况下是&#34; Hello&#34;之后的空格字符。另一方面,std::getline
将读取直到指定的分隔符;这里我们使用默认分隔符\n
,因此它将读取整行。