【问题标题】:mcrypt linux how to use rijndael 256 cbcmcrypt linux如何使用rijndael 256 cbc
【发布时间】:2011-11-12 22:42:24
【问题描述】:

我正在研究 linux/ubuntu。我发现 mcrypt 作为库自动包含在这个平台中。我想用 aes 256 和 cbc padding 7 (iv) 创建一个加密。有人可以给我一个示例,说明如何使用 aes 256 和 cbc iv,填充 7 加密字符串吗?

Rijndael 和 aes 一样!

这是我找到的与我想使用的库的链接:http://linux.die.net/man/3/mcrypt

【问题讨论】:

    标签: c++ linux ubuntu mcrypt


    【解决方案1】:

    你是问如何使用mcrypt?这是一个基本的骨架:

    #include <mcrypt.h>
    
    int main()
    {
      char algo[] = "rijndael-256";
      char mode[] = "cbc";
    
      char key[] = ...
      char iv[]  = ...
    
      MCRYPT td = mcrypt_module_open(algo, NULL, mode, NULL);
      if (td == MCRYPT_FAILED) { /* error */ }
    
      int r =  mcrypt_generic_init(td, key, keysize, iv);
    
      /* use  mdecrypt_generic() or mcrypt_generic() */
    
      mcrypt_generic_deinit(td);
    
      mcrypt_module_close(td);
    }
    

    您必须使用mcrypt_enc_get_key_size(td)mcrypt_enc_get_iv_size(td) 检查实际的密钥大小和IV 大小,并提供合适的密钥和IV 数据。


    编辑:因为它很简单,所以这里有一个添加和去除 PCKS7 填充的算法:

    std::string add_pkcs7_padding(std::string s, std::size_t n)
    {
      const std::size_t fill = n - (s.length() % n);
      s.append(fill, static_cast<char>(fill));
      return s;
    }
    
    std::string strip_pkcs7_padding(std::string s, std::size_t n)
    {
      const std::size_t pad = static_cast<unsigned char>(*s.rbegin());
      return s.substr(0, s.length() - pad);
    }
    

    (库级代码当然会测试n 可以用char 表示,并且在剥离过程中输入字符串非空且填充有效。)

    【讨论】:

    • 感谢这个例子。我的 IV 是 [0,0,0,0,0,0,0]。密钥是 32 个密钥字符串,例如:KEY= "AESD-CBED-POKF-OHFB-SNCJ-POLD-OK"。驾驶室你教我怎么放这个?另外我需要一个 PKCS7 填充。加密的结果会在 td 变量中吗? THX
    • PLUS - 这是一个 .C 文件吗?如何用 MCRYPT 编译它?如果我想静态编译 mcrypt.cpp 代码(无依赖关系),我将在哪里找到它。谢谢!!真的很感激:)
    • 请阅读手册。 mcrypt 有一本很棒的手册可以回答所有这些问题。在 Linux 上,输入 man libmcrypt
    • 我认为 mcrypt 没有任何生成填充的功能。您应该以正确的大小提供输入数据,即块大小的倍数。也许您可以在其他地方找到填充算法。
    • 顺便说一下,您的 IV 需要有正确的尺寸。使用我列出的函数来确定该大小。
    猜你喜欢
    • 2014-07-07
    • 2018-10-04
    • 2013-06-06
    • 2018-01-08
    • 1970-01-01
    • 2014-02-06
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多