Вы спрашиваете, как использовать 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
, и что во время удаления входная строка не пуста, и заполнение допустимо.)