Я делаю некоторую работу в 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 очень хорошо. Я понимаю, что он сделал:
- связать строку ключом, чтобы получить новую строку, назовем ее «string1».
- закодировать string1, как UTF-8, давайте называть кодирует строку «string2»
- использовать SHA1 для шифрования string2, длина 20 (CC_SHA1_DIGEST_LENGTH 20, верно?), Давайте назовем зашифрованную строку «string3»
- закодировать «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.)
'$ конфиги [«ключ»];' является то, что соль в PHP ? – meda
1. Выходной сигнал 'CC_SHA1' - это данные, и, как правило, невозможно преобразовать данные в строку, чтобы операция вообще не выполнялась. Это потому, что многие байты данных недействительны ASCII, такие как значения 0x00 - 0x1f. 2. Это хэш, а не шифрование, шифрование подразумевает, что его можно расшифровать. – zaph
Укажите данные ввода и вывода образца. – zaph