代码之家  ›  专栏  ›  技术社区  ›  Daniel

处理C++中分组密码的最佳方法?加密(C++)

  •  2
  • Daniel  · 技术社区  · 16 年前

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

    我正在为AES库使用Crypto++。

    ProcessBlock() 函数接受输入和输出字符数组。我假设它期望它们至少有块那么大。

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

    3 回复  |  直到 9 年前
        1
  •  1
  •   Nick Johnson    16 年前

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

    不过,理想的情况是,你甚至不必自己动手。你的加密库应该提供它。如果不行,我建议换个地方。比如OpenSSL。

        2
  •  0
  •   Mike Weller    16 年前

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

    Check out this CodeProject article on Crypto++

    当消息不是 必须填充模式消息。这个 填充的方法和值是 问题来源于 库和API。作为Garth Lancaster 指出,如果你不知道 有关填充的详细信息,请使用 StreamTransformationFilter。在这个 你。

        3
  •  0
  •   Purfideas    16 年前

    有一个PKCS标准叫做“填充”

    看到了吗 wikipedia page ,但它相当于用以下内容之一填充:

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

    这样你就知道在解密过程中原始消息的结尾。。。