【问题标题】:Best way to handle block ciphers in C++? (Crypto++)在 C++ 中处理分组密码的最佳方法是什么? (加密++)
【发布时间】:2010-09-13 13:45:43
【问题描述】:

我对 C++ 和 Block Cipher 加密都很陌生,我目前正在为 AES(16 字节种子/16 字节块)编写解密函数。一切进展顺利,但我的总数据大小并不总是我的块大小的倍数。我想知道在数据末尾处理剩余数据的最佳方法是什么。

我将 Crypto++ 用于 AES 库。

ProcessBlock() 函数采用输入和输出字符数组。我假设它期望它们至少足够大作为块大小。

在块密码中处理所有 16 字节块的最佳方法是什么,然后还处理剩余数据?

【问题讨论】:

    标签: c++ encryption cryptography padding


    【解决方案1】:

    这不仅仅是填充 - 您需要一种操作模式。好数学,坏数学博客正在写一个关于它们是什么以及如何使用它们的优秀系列here。另请参阅wikipedia entry。非常非常重要的一件事:永远不要使用 ECB(电子密码本)模式 - 您可以独立加密每个块。这是显而易见的方法,但它提供的安全性非常差。

    不过,理想情况下,您甚至不必自己执行此操作。你的加密库应该提供它。如果没有,我建议换成别的。像 OpenSSL。

    【讨论】:

      【解决方案2】:

      你想要的是一个填充系统。

      Check out this CodeProject article on Crypto++:

      当消息不是 密码的块大小,ECB 或 CBC 必须填充模式消息。这 填充的方法和值是 关于问题的根源 密码学之间的互操作性 库和 API。作为加思兰开斯特 指出,如果你不知道 填充的细节,使用 流转换过滤器。在这个 情况下,Crypto++ 过滤器将填充 你。

      【讨论】:

        【解决方案3】:

        有一个称为“填充”的 PKCS 标准

        请参阅wikipedia page,但它相当于使用以下之一进行填充:

         01
         02 02
         03 03 03
         04 04 04 04
         05 05 05 05 05
        

        这样你在解密过程中就知道原始消息在哪里结束...

        【讨论】:

          猜你喜欢
          • 2011-05-20
          • 2022-01-25
          • 1970-01-01
          • 2012-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-10
          • 2011-07-16
          相关资源
          最近更新 更多