gpt4 book ai didi

c++ - AES加密/解密接受所有明文

转载 作者:行者123 更新时间:2023-11-30 02:19:37 24 4
gpt4 key购买 nike

我正在做这个任务,我遇到了这个问题,如果我输入一个句子,例如:“你好,我的名字是亚当”,它只会加密“你好”。但是当我将句子分配给明文时,我得到一个完整的加密/解密句子。

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;

谁能解释一下……?我不太明白它是如何工作的……我需要用户输入这个任务。有没有办法让我可以让用户输入并获得完整的加密句子?

最佳答案

尝试使用 std::getline(cin, plaintext) 而不是 cin >> plaintext

operator>> 在此上下文中将读取直到下一个空格,在本例中是“Hello”之后的空格字符。另一方面,std::getline 将一直读取到指定的分隔符;这里我们使用默认分隔符 \n,因此它将读取整行。

关于c++ - AES加密/解密接受所有明文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50668010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com