Проверка по телефону кода, сгенерированного на сервере, отправлено на электронную почту с помощью PHP и SwiftIOS

Программируем под IOS
Ответить
Anonymous
 Проверка по телефону кода, сгенерированного на сервере, отправлено на электронную почту с помощью PHP и Swift

Сообщение Anonymous »

Для аутентификации входа в систему я хотел бы, чтобы пользователи iosapp ввели код, отправленный с сервера по электронной почте или тексту. Зашифровал код в приложение, расшифровывает его, используя ту же схему алгоритма, и если фраза является правильной, называйте этот успех. Тем не менее, код, который LLM дал мне сделать это, не работает, и когда я смотрю на код, я не вижу, как он должен работать. Спасибо за предложения.

Код: Выделить всё

var randomCodeStr: String
let passphrase = "secretsalt"
var userToken: String//a token identifying user

func makeCodeAndEmail {
let code = Int.random(in: 100000...999999)//make random code
randomCodeStr = String(code)//stringify
self.postToServer(randomCodestr,usertoken)//send to server to email to user
}
< /code>
Кодовый сервер PHP < /p>
$passphrase = "secretsalt";
$code = $_POST['randomcode'];//received from phone
function createCode($passphrase,$code)
{
$saltedCode = hash_hmac('sha1', $code, $passphrase); // salt code with phrase
$encodedCode = substr($saltedCode, 0, 6); // take first 6 characters of hash
return $encodedCode;
}
// Отправить это пользователю, который затем должен ввести в приложение
// обратно на телефон
swift

Код: Выделить всё

func verifyCode(_ code: String, passphrase: String) -> Bool {
let hashedCode = hashHMAC(code, key: passphrase)
let encodedCode = String(hashedCode.prefix(6))
return code == encodedCode
}

func hashHMAC(_ input: String, key: String) -> String {
let algo = CCHmacAlgorithm(kCCHmacAlgSHA1)
let str = input.cString(using: .utf8)
let keyStr = key.cString(using: .utf8)
var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
if let mystr = str, let myKeyStr = keyStr {
CCHmac(algo, myKeyStr, strlen(myKeyStr), str, strlen(mystr), &digest)
}
return Data(bytes: digest, count: digest.count).base64EncodedString()
}
Происходит то, что строка, возвращаемая hashhmac , всегда отличается от введенного кода, поэтому успеха никогда не существует. Например, я получаю Code = '7A2061' и после вступления в App: encodedCode = "rbxdrm", которые, конечно, отличаются, поэтому они не совпадают.
>

Подробнее здесь: https://stackoverflow.com/questions/796 ... php-and-sw
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»