mcrypt linux如何使用rijndael 256 cbc

sun*_*set 1 c++ linux ubuntu mcrypt

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

Rijndael和aes一样.

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

Ker*_* SB 5

你在问如何使用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);
}
Run Code Online (Sandbox Code Playgroud)

您有检查实际密钥大小和IV尺寸mcrypt_enc_get_key_size(td)mcrypt_enc_get_iv_size(td)和提供合适的密钥和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);
}
Run Code Online (Sandbox Code Playgroud)

(图书馆级代码当然会测试n可以用a表示char,并且在剥离输入字符串期间非空并且填充有效.)