2014-10-29 2 views
0

У меня есть эта последовательность байт (напечатанных из HTML, поэтому извиняется за уродливый формат)Drupal и Objective C Base 64 рассогласование

193<br/>250<br/>194<br/>129<br/>62<br/>60<br/>12<br/>171<br/>199<br/>96<br/>13<br/>125<br/>166<br/>175<br/>80<br/>85<br/>137<br/>29<br/>15<br/>189<br/>33<br/>231<br/>237<br/>98<br/>165<br/>35<br/>75<br/>250<br/>181<br/>150<br/>35<br/>175<br/>129<br/>174<br/>13<br/>13<br/>121<br/>229<br/>30<br/>173<br/>112<br/>210<br/>2<br/>165<br/>110<br/>113<br/>141<br/>166<br/>102<br/>105<br/>33<br/>82<br/>220<br/>233<br/>118<br/>36<br/>73<br/>88<br/>196<br/>152<br/>15<br/>231<br/>164<br/>119<br/> 

Когда я использую функцию Drupal: [_password_base64_encode][1] я получаю следующее base64 строки :

/fjk/u1DAgulUpETay8IJZM5DoP6briMZCmGuLfZXwOUiqE1tJi5h0bo0IePlpcdaZK6GlRuqFGGMFAaDQCdr/ 

Но когда я использую эту последовательность байтов в моем приложении IOS с кодом:

NSString *base64Encoded = [hash base64EncodedStringWithOptions:0]; 

Я получаю:

wfrCgT48DKvHYA19pq9QVYkdD70h5+1ipSNL 

Почему такое поведение?

Благодаря

ответ

1

адаптированной функции _password_base64_encode к прошивке:

- (NSString*)drupalBase64PasswordEncode:(NSData*)data { 
    NSUInteger count = [data length]; 
    int i = 0; 
    NSString *itTo64String = @"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 
    const char *itTo64 = [itTo64String cStringUsingEncoding:NSUTF8StringEncoding]; 
    char *input = [data bytes]; 
    NSMutableString *output = [[NSMutableString alloc] init]; 
    do { 
     unsigned char value = (unsigned char)input[i++]; 
     int value2; 
     unsigned char toInsert = itTo64[value & 0x3f]; 
     [output appendString:[NSString stringWithFormat:@"%c" , toInsert]]; 
     if (i < count) { 
      value2 = value | ((unsigned char)input[i] << 8); 
     } 
     toInsert = itTo64[(value2 >> 6) & 0x3f]; 
     [output appendString:[NSString stringWithFormat:@"%c" , toInsert]]; 
     if (i++ >= count) { 
      break; 
     } 
     if (i < count) { 
      value2 = value2 | ((unsigned char)input[i] << 16); 
     } 
     toInsert = itTo64[(value2 >> 12) & 0x3F]; 
     [output appendString:[NSString stringWithFormat:@"%c" , toInsert]]; 
     if (i++ >= count) { 
      break; 
     } 
     toInsert = itTo64[(value2 >> 18) & 0x3F]; 
     [output appendString:[NSString stringWithFormat:@"%c" , toInsert]]; 
    }while(i < count); 
    return output; 
} 
0

Наиболее вероятным объяснением является то, что вы кодирующая мусор вместе с вашей целевой строки - вы можете сбросить фактическую строку, которая получает закодированный, такие как

$string = ' ... '; 
var_dump($string); 
$base64_string = _password_base64_encode($string); 
var_dump($string); 

Это, скорее всего, вы включаете в себя разные символы (перерывы, новые строки в другом формате и т. д.), чем вы планировали при кодировании.

Кроме того, вы можете сравнить результат с встроенной функцией PHP base64_encode и сравнить результаты.

+0

Да, Drupal, используя «специальную» функцию для кодирования базы 64. Я скопировать его портирован прошивку в ответе. благодаря – xger86x

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