Форум: Форум C++Разное
Новые темы: 00
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вылетает программа
 
 автор: bronenos   (13.07.2008 в 23:25)   письмо автору
 
 

Это не C++, это Objective C (если возникнут вопросы про синтаксис), но он полностью совместим с C, и потому проблема чисто в C, как мне кажется...


/* Кодирование пароля */
+(Data*) encodePassword: (NSString*)password
{
uchar codes[] = {
0xF3, 0x26, 0x81, 0xC4,
0x39, 0x86, 0xDB, 0x92,
0x71, 0xA3, 0xB9, 0xE6,
0x53, 0x7A, 0x95, 0x7C
};

int i;
uchar* symbols = (uchar*) malloc([password length]*sizeof(uchar));
for (i=0; i<[password length]; i++) symbols[i] = (uchar) [password characterAtIndex:i] ^ codes[i];

Data* pswd = [[Data alloc] init];
[pswd appendBytes:symbols length:[password length]];
return pswd;
}


По какой-то причине, если я здесь добавлю вместо последнего symbol байт 0x80 и больше, то все слетает.. если я вручную впишу symbols[i] = 0xYY; то даже если будет 0xDB, все продолжит работать.. ну не понимаю я... (использую unsigned char* стек)

  Ответить  
 
 автор: bronenos   (14.07.2008 в 11:41)   письмо автору
 
   для: bronenos   (13.07.2008 в 23:25)
 

Апдейт.. если я провожу операцию на

uchar codes[] = {
0xF3, 0x26, 0x81, 0xC4,
0x39, 0x86, 0xDB, 0x92,
0x71, 0xA3, 0xB9, 0xE6,
0x53, 0x7A, 0x95, 0x7C
};

uchar text[] = {
0x28, 0x62, 0x72, 0x29,
0x74, 0x65, 0x73, 0x74
};

int i;
uchar symbol;
Data* pswd = [[Data alloc] init];

for (i=0; i<[password length]; i++)
{
symbol = (unichar) text[i] ^ codes[i];
[pswd appendBytes:&symbol length:1];
}

return pswd;


То значит вылетает.. последний символ (8й в моем случае)
0xE6 при 0x74 ^ 0x92
Если 0x74 заменить на 0x73, то
0xE1 при 0x73 ^ 0x93 (программа работает)
Если 0x74 заменить на 0x75, то
0xE7 при 0x75 ^ 0x93 (программа работает)
Если вернуть 0x74, то она опять вылетает.. я не въезжаю...

Кстати прошу заметить, что у меня два таких символа 0x74.. и проблема только с последним..
И даже если я заменю на

uchar text[] = {
0x28, 0x62, 0x72, 0x29,
0x74, 0x74, 0x74, 0x73
};

То тоже будет работать.. пока последний не станет 0x74..
Может, это и не единственное проблемное значение.. но перебирать все 256 мне неохота 8)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования