2012-03-02 3 views
0

У меня есть код в ObjCне может найти свою ошибку, гаммирование

-(IBAction)click:(id)sender 
{ 
    NSURL *url = [NSURL URLWithString:@"http://localhost:8888/second.php"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    [request setHTTPMethod:@"POST"]; 
    NSString *data=[self transform:@"qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm" Key:@"0800fc577294c34e0b28ad2839435945"]; 
    NSData *requestBody = [[NSString stringWithFormat:@"p=%@",data] dataUsingEncoding:NSUTF8StringEncoding]; 
    [request setHTTPBody:requestBody]; 
    NSURLResponse *response = NULL; 
    NSError *requestError = NULL; 
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError]; 
    NSString *responseString = [[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] autorelease]; 
    UIAlertView *alert=[[[UIAlertView alloc] initWithTitle:@"Message" message:responseString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] autorelease]; 
    [alert show]; 
    NSLog(@"log=%@",responseString); 


} 

- (NSString*) transform:(NSString*)input Key:(NSString*)key 
{ 
    NSMutableString* output = [[NSMutableString alloc] init]; 
    unsigned int vlen = [input length]; 
    unsigned int klen = [key length]; 
    unsigned int v = 0; 
    unsigned int k = 0; 


    for (v=0; v < vlen; v++) { 
     unichar c = [input characterAtIndex:v]^[key characterAtIndex:k]; 
     [output appendString:[NSString stringWithFormat:@"%C", c]]; 

     k = (++k < klen ? k : 0); 
    } 

    NSString* final = [[[NSString alloc] initWithString:output] autorelease]; 
    [output release]; 
    return final; 
} 

и дешифровать в PHP

$res=""; 
$key="0800fc577294c34e0b28ad2839435945"; 
$k=0; 
if ($_POST['p']){ 


     $vlen = strlen($_POST['p']); 
     $klen = strlen($key); 
     $v = 0; 
     $k = 0; 

     for ($v=0; $v < $vlen; $v++) { 
      $c = $_POST['p'][$v]^$key[$k]; 
      $res=$res.$c; 
      $k = (++$k < $klen ? $k : 0); 
     } 

    echo $res; 
    } 

, но когда я проверить это результат

qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcv > d = 1 "+ dssstcn | e ~ dn1; 9? nve, e9; upgrade ('% & 5nqfyelfdnfll $ + f'6icr & oh #' (s4> vas6; aclkl |} brg86tp4 # xz! ! 2" ро б; 6njk> '~ hpbnktvaw "!" Р> mp0gj9lkj` ~ 3 | i6 =

однако я отправить сообщение

qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm

пожалуйста, помогите мне найти мою ошибку.

+0

нашел мою проблему, она была здесь $ k = (++ $ k <$ klen? $ K: 0); Я переписываю его на простой, если не трехмерный. – SergeyM

ответ

1

В позиции 50 у вас символ XOR «b» из вашей строки с символом «b» из вашего ключа, что приводит к null character. Вероятно, это интерпретируется как контрольный и отбрасывается.

Вы используете слово «шифр»; однако метод, который вы используете, никоим образом не защищен. Возможно, вы могли бы подробнее рассказать о том, чего вы пытаетесь достичь здесь. Есть ли причина, по которой вы отказались использовать SSL для шифрования?

+0

Это шифр. Это больше не считается безопасным. – JeremyP

1

Вы не можете использовать xor два unichars и ожидать, что результат будет действительным unichar. Это общая проблема с вашим алгоритмом, который сначала не соответствует знаку 50, как говорит jnic. Сначала необходимо преобразовать NSString и ключ в NSData, используя -dataWithEncoding:. Затем вы выполните шифрование. Затем вам нужно отправить двоичные данные на ваш PHP-сервер. Сервер PHP должен отменить все шаги в программе Objective-C.

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