Я пытаюсь создать проверку безопасности пароля, которая отправляет на сервер зашифрованный пароль (используя библиотеку as3crypto для шифрования AES и PHP в серверной среде) и получая xml с тем же паролем, зашифрованным снова, и ситуацию с паролем (если он действителен или нет). Когда я получаю пароль, я расшифровываю его и сравниваю с ранее введенным паролем. Это работает на ПК, работает на Android, но когда я пробую тот же код на своем iPad, я возвращаю некоторые азиатские идеограммы, которые явно не совпадают с введенным паролем.
Я уже пытался изменить BIT_KEY на 192 и 256, и ничего не изменилось. У кого-нибудь есть идеи, как это исправить?
Вот мой сценарий:
Пользователь вводит пароль и нажимает «Подтвердить», чтобы подтвердить его.
Кнопка вызывает эту функцию:
public function restServiceCall(event:MouseEvent = null):void { pswdString = txtKey.text; // Create the HTTP request object var request:URLRequest = new URLRequest("http://jpiaget.com.br/webservice.php"); request.method = URLRequestMethod.GET; var criptedKey:String = AES.encrypt(pswdString, key, 128); // Add the URL variables var variables:URLVariables = new URLVariables(); variables.application = currentApplication; variables.password = criptedKey; request.data = variables; // Initiate the transaction requestor = new URLLoader(); requestor.dataFormat = URLLoaderDataFormat.TEXT; requestor.addEventListener(Event.COMPLETE, httpRequestComplete); requestor.load(request); }
Значения ->
pswdString: abc
ключ: jarbas
зашифровать строку: tXb1/1ZWVlb3wN8 (base64)
Затем на стороне сервера есть код, который просто возвращает xml с двумя свойствами: пароль и проверка. Свойство «пароль» такое же, как я отправил, а «проверено» — это число (0 или 1), которое на данный момент всегда возвращает 1.
Вернемся к AS3, я вызываю эту функцию:
private function httpRequestComplete(event:Event):void { //Preparese.traceBox.txtTrace.appendText(event.target.data); var newXML:XML = new XML(event.target.data); var validatedString:String = newXML.attribute("password"); validated = (newXML.attribute("validated") == "1") ? true : false; //Preparese.traceBox.txtTrace.appendText("validatedString decripted: " + AES.decrypt(validatedString, chave, 128)); Here i have some asian ideograms, what must to be "abcde" var decryptedValidated:String = AES.decrypt(validatedString, chave, 128); if (pswdString == decryptedValidated && validated) { Preparese.traceBox.txtTrace.appendText("VALID PASSWORD/!"); Preparese(parent).checkConection(); Preparese(parent).removeChild(this); } }
http://puu.sh/5CRep.jpg — PrintScreen возврата traceBox моего iPad.