【问题标题】:256-bit Rijndael blocksize?256 位 Rijndael 块大小?
【发布时间】:2013-03-05 04:36:03
【问题描述】:

我正在尝试使用 cryptopp 将解密例程从 C# 程序移植到 C++,但我遇到了问题。在 C# 程序中,密钥和 IV 都是 256 位。所以我尝试做这样的事情:

    char *hash1 = "......";
    std::string hash2;

    CryptoPP::StringSource(hash1, true,new CryptoPP::Base64Decoder(new CryptoPP::StringSink(hash2)));
    CryptoPP::Rijndael::Decryption decryptor(key, 32);
    CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption( decryptor, iv);
    CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, (new CryptoPP::StringSink( decryptedData ) ));
    stfDecryptor.Put( reinterpret_cast<const unsigned char*>( hash2.c_str() ), hash2.size() );
    stfDecryptor.MessageEnd();

我得到了

StreamTransformationFilter:密文长度不是块大小的倍数。

我尝试像这样传递 IV 大小:

    CryptoPP::CBC_Mode<CryptoPP::Rijndael >::Decryption decr;
    decr.SetKeyWithIV(key, 32, iv, 32);

然后我得到:

IV 长度 32 超过最大值 16。

那么,当数据被长度 = 32 的 IV 加密时,我该如何解密数据?

【问题讨论】:

  • the CryptoPP website 上的图表来看,我有点犹豫是否建议它支持除 128 位块之外的任何东西。 (显然它支持更大的 keys)。如果他们的削减仅符合 AES,那么这是有道理的,因为没有 AES 衍生产品使用超过 16 字节的块和 IV)。看看the header file 就很有说服力了。
  • @WhozCraig 你是指上面写着FixedBlockSize&lt;16&gt;的那部分?
  • @owlstead 差不多,是的。老实说,我不知道它是否会派生出你自己的Rijindael_Info32 作为public FixedBlockSize&lt;32&gt;, public VariableKeyLength&lt;16, 16, 32, 8&gt; 的扩展,或者甚至是public FixedBlockSize&lt;32&gt;, public FixedKeyLength&lt;32&gt;,而算法的其余部分只会占据并工作,因为我不是对 CryptoPP 足够熟悉,可以拨打电话。我的悲观主义者说这不太可能。
  • @WhozCraig 好吧,我不是 Rijndael 实现方面的专家,但我仍然很确定这也不太可能。
  • @WhozCraig 发布了我们的调查结果作为答案,并提高了一些您接受/好的答案作为回报

标签: c++ encryption aes crypto++


【解决方案1】:

从实现来看,crypto++ 的当前迭代只支持块大小为 16 字节的 Rijndael。由于 CBC 模式的 IV 必须精确地是单个块,因此具有 256 位块大小的 Rijndael 似乎是不可能的。

【讨论】:

  • +1 我同意。除非 CryptoPP 的作者有先见之明来处理 FixedBlockSize&lt;32&gt; 手工制作的推导并且它“正常工作”,否则很可能没有什么可以做的。值得一试,但我不会屏住呼吸。
  • 感谢您的回答。我将使用 mcrypt 而不是 CryptoPP
  • @Maarten - 这是另一个问题的重复。您是 100% 正确的,但正试图在 [不久的] 将来改变它。一旦我们推出 Crypto++ 5.6.3 和 5.7,具有 192 和 256 块大小的 Rijndael 就会出现在 TODO 列表中。
  • @jww,CryptoPP 现在支持 AES-256 了吗?
  • @user3933607 - Crypto++ 支持 AES-256,密钥大小为 256 位。它不支持 256 位(或 192 位)的块大小。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多