mcrypt linux как использовать rijndael 256 cbc - PullRequest
1 голос
/ 08 сентября 2011

Я работаю над Linux / Ubuntu. Я обнаружил, что mcrypt автоматически включается в качестве библиотеки на этой платформе. Я хочу создать шифрование с AES 256 и CBC 7 (IV). Может кто-нибудь дать мне пример того, как зашифровать строку с помощью aes 256 и cbc iv, заполнение 7?

Рейндаэль - то же самое с aes.!

это ссылка, которую я нашел с библиотекой, которую я хотел бы использовать: http://linux.die.net/man/3/mcrypt

1 Ответ

5 голосов
/ 08 сентября 2011

Вы спрашиваете, как использовать 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);
}

Вы должны проверить фактический размер ключа и размер 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);
}

(Код библиотечного уровня, конечно, будет проверять, что n может быть представлен char, и что во время удаления входная строка не пуста, и заполнение допустимо.)

...