McRypt Linux如何使用rijndael 256 cbc

mcrypt linux how to use rijndael 256 cbc

本文关键字:cbc rijndael 何使用 Linux McRypt      更新时间:2023-10-16

我在linux/ubuntu上工作。我发现mcrypt作为一个库自动包含在这个平台中。我想创建一个加密aes 256和cbc填充7 (iv)。有人能给我一个例子,如何加密aes 256和cbc iv,填充7字符串?

Rijndael与aes相同。

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

您是在问如何使用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表示,并且在剥离输入字符串期间非空并且填充有效。)