2015-06-28 1 views
2

Я делаю некоторую работу в php, пытаюсь зашифровать строку SHA1. Тем не менее, мне нужно сопоставить результат с результатом того, кто сделал это в Xcode. То, что он написал в Xcode выглядит следующим образом:SHA1 в Xcode и PHP с другим результатом

NSString *saltedPassword = [NSString stringWithFormat:@"%@%@",_myTextField.text,saltKey]; 
NSString *hashedPassword = nil; 
unsigned char hashedPasswordData[CC_SHA1_DIGEST_LENGTH]; 
NSData *saltedData = [saltedPassword dataUsingEncoding:NSUTF8StringEncoding]; 
if (CC_SHA1([saltedData bytes], [saltedData length], hashedPasswordData)) { 
    hashedPassword = [[NSString alloc] initWithBytes:hashedPasswordData length:sizeof(hashedPasswordData) encoding:NSASCIIStringEncoding]; 
} else { 
    NSLog(@"ERROR: registerAction, should not be here"); 
    abort(); 
} 

Я не знаю, Xcode очень хорошо. Я понимаю, что он сделал:

  1. связать строку ключом, чтобы получить новую строку, назовем ее «string1».
  2. закодировать string1, как UTF-8, давайте называть кодирует строку «string2»
  3. использовать SHA1 для шифрования string2, длина 20 (CC_SHA1_DIGEST_LENGTH 20, верно?), Давайте назовем зашифрованную строку «string3»
  4. закодировать «string3» как ASCII, чтобы получить окончательный результат.

Итак, основываясь на моем понимании выше, я написал код в PHP следующим образом:

$password.=$configs['key']; 
$password=mb_convert_encoding($password, "UTF-8"); 
$codedPassword=sha1($password, $raw_output = TRUE); 
$codedPassword=mb_convert_encoding($codedPassword, "ASCII"); 
echo($codedPassword); 

$ пароль является строка, я хочу, чтобы зашифровать. Но результат, который я получил, отличается от результата Xcode. Мы используем тот же ключ.

Например:

Если вход "123456", выход Xcode является "OY:>/ о × NVÛ²¿ + (А7", выход РНР «| J 7b? «Я не уверен, что это точная строка или сама строка содержит некоторые символы, которые не могут быть отображены.)

Кто-нибудь знает, как изменить php-код чтобы получить тот же результат? (Было бы прекрасно, что ваше решение о том, как изменить код PHP, потому что я не могу изменить Xcode на данный момент. Моя задача - написать код PHP, чтобы соответствовать результату Xcode.)

+0

'$ конфиги [«ключ»];' является то, что соль в PHP ? – meda

+0

1. Выходной сигнал 'CC_SHA1' - это данные, и, как правило, невозможно преобразовать данные в строку, чтобы операция вообще не выполнялась. Это потому, что многие байты данных недействительны ASCII, такие как значения 0x00 - 0x1f. 2. Это хэш, а не шифрование, шифрование подразумевает, что его можно расшифровать. – zaph

+0

Укажите данные ввода и вывода образца. – zaph

ответ

0

Вы, кажется, описывающее:

NSData *saltedData = [saltedPassword dataUsingEncoding:NSUTF8StringEncoding]; 

как «кодировать строку1 как UTF-8, давайте называть кодирует строку„string2“» и делает:

$password=mb_convert_encoding($password, "UTF-8"); 

Однако этот шаг является преобразование строки в массив байтов, посмотрите например ответов на этот вопрос String to byte array in php, кажется, что вы должны сделать что-то подобное в этом шаге:

$bytes = unpack("H*",$password); 
+0

Это, похоже, не отвечает на вопрос. Возможно, более полно это решит. – zaph

+0

Почему вы используете «H *»? Мне нужно преобразовать $ bytes в UTF-8 после распаковки? –

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

  • Нет связанных вопросов^_^