AES-128-CFB-8的CryptoPP前16个字节已损坏[重复]

问题描述 投票:0回答:1

您好,我一直在尝试使用CryptoPP解密,但是它不起作用。解密消息的前16个字节不是预期的文本。我已经尝试解决该问题,但没有找到任何方法。可以找到我的旧帖子here。值得一提的是:我为共享机密和IV使用了一个相同的密钥。也许有人知道Minecraft protocolthis部分),或者可以提及代码错误。

std::vector<unsigned char> data;
std::string sendString;
for (unsigned char c : data) {
    sendString += c;
}

std::string sDecryptedSharedSecret = "aaaaaaaaaaaaaaaa";

CryptoPP::byte IV[CryptoPP::AES::BLOCKSIZE];
memcpy(IV, sDecryptedSharedSecret.c_str(), 16);

/* De/Encryptor */
CryptoPP::CFB_Mode<CryptoPP::AES>::Decryption AESDecryptor((CryptoPP::byte*)sDecryptedSharedSecret.c_str(), (unsigned int)16, IV, 1);

/* Encrypt Data */
std::string sSource(sendString);
std::string sTarget("");
try {
    CryptoPP::StringSource(sSource, true,
        new CryptoPP::StreamTransformationFilter(AESDecryptor,
            new CryptoPP::StringSink(sTarget)
        )
    );
}
catch (CryptoPP::Exception) {
      std::cout << "Something went wrong\n";
}

std::cout << sTarget << std::endl;
encryption minecraft crypto++
1个回答
0
投票

如果以下明文:

The quick brown fox jumps over the lazy dog 

使用AES-CFB8和以下密钥/ IV加密:

0x61616161616161616161616161616161 

(或Utf-8解码:aaaaaaaaaaaaaaaa),以下密文结果:

0x05DEDD51C250E99EB8CD5C201C1DC7104AFB6573541CA91A10455D715BDA809D2739AD3EBC00F504E56EE4

使用

std::vector<unsigned char> data {0x05, 0xDE, 0xDD, 0x51, 0xC2, 0x50, 0xE9, 0x9E, 0xB8, 0xCD, 0x5C, 0x20, 0x1C, 0x1D, 0xC7, 0x10, 0x4A, 0xFB, 0x65, 0x73, 0x54, 0x1C, 0xA9, 0x1A, 0x10, 0x45, 0x5D, 0x71, 0x5B, 0xDA, 0x80, 0x9D, 0x27, 0x39, 0xAD, 0x3E, 0xBC, 0x00, 0xF5, 0x04, 0xE5, 0x6E, 0xE4};

此密文可以使用发布的代码成功解密。 即该代码显然有效,并且不是问题的原因。


对此问题的可能解释可能是在CFB8中:

  • 如果dataactual密文之前仅包含one个额外的字节(甚至更多字节),则会对entire第一个块(16个字节)产生错误的解密)的实际密文,可以通过在上述示例的开头添加任意字节来轻松说明。类似的效果在开始时会有一个修改或丢失的字节(甚至更多的字节),可以类似地进行演示。由于CFB是stream cipher(即,明文和密文具有相同的长度),因此可以通过比较明文和密文的长度来进行测试(至少在附加字节或丢失字节的情况下)。也许不小心包含了其他字符(例如,换行符或类似字符等空白字符)。

  • << [您如何确定密钥和IV是否相同?顺便说一下,关于密钥和IV有许多与模式有关的约束(例如,永远不要重复使用密钥/ IV对),例如here
  • 出于进一步考虑,如果发布一个密文示例,该密文的第一个块被错误地解密,其中包括采用合适编码(十六进制或Base64)的明文和密钥,则类似于我的示例,这可能会很有用。

  • © www.soinside.com 2019 - 2024. All rights reserved.