|
|
|
| Это не 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
(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) | |
|
|
|
|