2014-09-14 4 views
0

У меня есть 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; 
} 
+0

Это php-страница, я знаю, что она может применяться и к C, но как это делается? не могли бы вы показать мне пример? и почему HMAC ему поможет? – Grego

+0

Моя ошибка, я даже не смотрел ваш код. –

ответ

0

Последняя ошибка фикс mcrypt был с 2007 года использовать библиотеку, которая на самом деле поддерживают и использовать функциональные возможности HMAC для добавления тега аутентификации (который должен также обеспечить целостность). Не забудьте включить IV в расчет.

+0

Не могли бы вы предложить некоторые простые для реализации в C? – Grego

+0

Попробуйте API EVP из OpenSSL. –

Смежные вопросы