2016-09-06 2 views
0

Я хочу зашифровать массив типа float и снова декодировать его с помощью той же функции. Я прочитал несколько потоков в Интернете, но я не мог найти решение, которое делает меня счастливым. Я попытался использовать указатель float-type для char * и XOR для результата с помощью ключа с символом char. Вот моя закодировать функция:XOR шифрование массива float в c

const char* key = "mykey"; 
int keylen = sizeof(key)/sizeof(key[0]); 

void encodeData(float *data, int size) 
{ 
    int bytes = (int)(sizeof(float)/sizeof(char)); 

    for(int i=0; i<size; i++) 
    { 
     for(int j=0; j<bytes; j++) 
     { 
      data[i] = *(((char *)&data[i]) + j)^(key[(bytes*i)%keylen]); 
     } 
    } 
} 

Компиляция работает, но я не получить те же результаты после ен- и декодирования. Что я делаю не так?

+2

При использовании 'sizeof' на указатель, вы получите размер указателя, а не то, что он указывает. Либо используйте 'strlen' для получения длины строки, либо создайте' key' массив. –

+1

Левая часть задания неверна. Вместо 'data [i] =' он должен быть '* ((char *) & data [i]) + j) =' –

+1

Кроме того, 'sizeof (char)' определяется стандартной спецификацией C, чтобы всегда быть ' 1'. –

ответ

1

Исправлено:

void encodeData(float *data, int size) 
{ 
    int bytes = (int)(sizeof(float)/sizeof(char)); 
    char *tmp = (char *) data; 
    for(int i=0; i<bytes*size; i++) 
    { 
     *(tmp+i) = *(tmp+i)^key[i%keylen]; 
    } 
    data = (float*) tmp; 
} 
+0

Не отправляйте ответ в качестве ответа. Вы можете обновить тело вопроса, отметив его как обновление. –

+0

@EugeneSh. Обычно он не должен - но на этот раз ответ также содержит решение, так что должно быть хорошо, не так ли? – Aconcagua

+0

Ну, тогда, возможно, его следует разделить на часть решения и часть ответа –

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