У меня есть 2 функции для шифрования и расшифровки массива символов (переменная называется: buffer), затем я сохраняю символы в файле, поэтому я могу расшифровать их позже, но я заметил, что если я изменю любой из символов в зашифрованном тексте mcrypt не предупреждает о какой-либо ошибке, он просто показывает разные сумасшедшие символы в фрагменте текста, а остальное выглядит идеально, я хочу сказать, что зашифрованная текстовая строка имеет ошибку.Может ли проверка MCrypt проверить, был ли изменен хэш?
Это способ сделать это?
Это не заметно, когда текст небольшой, но так как я хэш-тексты 168k символов.
Мои переменные передаются следующим образом: buffer_len = 32;
Мои IV
и key
каждый из них представляет собой список символов из 16 бит.
int encrypt(void* buffer, int buffer_len, char* IV, char* key, int key_len)
{
MCRYPT td = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL);
int blocksize = mcrypt_enc_get_block_size(td);
int n_blocks = buffer_len/blocksize;
int i = 0;
if (buffer_len % blocksize != 0)
return 1;
mcrypt_generic_init(td, key, key_len, IV);
for (i = 0; i < n_blocks; i++)
mcrypt_generic(td, ((unsigned char*)buffer) + (i * blocksize), blocksize);
mcrypt_generic_deinit(td);
mcrypt_module_close(td);
return 0;
}
int decrypt(void* buffer, int buffer_len, char* IV, char* key, int key_len){
MCRYPT td = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL);
int blocksize = mcrypt_enc_get_block_size(td);
int n_blocks = buffer_len/blocksize;
int i = 0;
if (buffer_len % blocksize != 0)
return 1;
mcrypt_generic_init(td, key, key_len, IV);
for (i = 0; i < n_blocks; i++)
mdecrypt_generic(td, ((unsigned char *)buffer) + (i * blocksize), blocksize);
mcrypt_generic_deinit(td);
mcrypt_module_close(td);
return 0;
}
Это php-страница, я знаю, что она может применяться и к C, но как это делается? не могли бы вы показать мне пример? и почему HMAC ему поможет? – Grego
Моя ошибка, я даже не смотрел ваш код. –