2012-01-09 7 views
0

Xcode에서 로그인보기로 작업 할 때 이미 인증을 받아야하는 앱을 만들고 있습니다. 내가 현재 사용하고있는 방법은 내가 내 서버에 제출 한 URL을 기반으로하지만, URL에 추가로 다음과 같이 일반 시험의 로그인과 암호를 제출한다 :목표 C - Salt/MD5 해시?

http://myurl.com/[email protected]&password=mypassword

가 좀 모호한 조언을 않았다 그들은 "소금과 해쉬 40 자의 토큰"을 사용했지만 이것이 어떻게/어디에서 행해졌는지를 볼 수 없었습니다. 데이터를 조작하기 위해 서버 측에서 몇 가지 작업을 수행 할 수 있지만 xcode에서 수행하는 작업을 취소/해시 할 수 있어야합니다.

Objective C에 MD5 해시를 제공하는 방법이 있습니까? url 요청을 제출하기 전에 URL 요청의 텍스트가 이미 암호화되도록 암호를 제공 했습니까? 서버 측 PHP에서 MD5 해시가 데이터베이스의 MD5 해시와 일치하는지 확인할 수 있으므로 가능하면 완벽 할 것입니다.

그렇다면이 소금/해시에 대한 메소드를 작성해야합니다. 목표 데이터베이스에서 PHP에서 데이터베이스와 비교할 수있는 뭔가가 있어야합니다.

미리 감사드립니다.

실버 타이거

업데이트 : 권고를 할 수 있지만

2012년 1월 14일 불행히도 서버와 SSL 옵션 내에서 제어 할 수있는 부분이 아닙니다. 내가 SHA1 및/또는 base64 응용 프로그램에서 해시를 만들고 서버에서 다시 만들거나 비교할 수 있도록 추가 연구를해야 할 것입니다. 점잖은 읽기에 대한 모든 포인터는 내가 SSL을 얻을 수있을 때까지 인정 될 것입니다.

+0

당신이 만약 제어 서버 대신 HTTP 대신 HTTPS를 사용하고 전체 연결을 암호화 할 수 있습니다. –

답변

2

OpenSSL C functions을 사용할 수 있습니다. 그런 다음 출력을 URL로 인코딩 할 수있는 것으로 변환해야합니다. 출력을 16 진수로 변환 할 수는 있지만 base64를 사용하는 것이 일반적입니다.

NB 연결의 양쪽 끝을 제어 할 수 있다면 MD5는 더 이상 암호 학적으로 안전한 것으로 간주되지 않습니다. 대신 SHA 계열의 해시 중 하나를 고려할 수 있습니다.

+0

그냥 백업하는 것 : HTTP를 통해 해시 된 암호를 보내려면 SSL/HTTPS를 사용하는 것보다 훨씬 나쁘다. 이는 기술적 지식이 충분한 사람이 앱을 분해하고 자신이 무엇을 염두에두고 있는지 파악하기가 쉽지 않기 때문입니다. – lxt

0

xcode에서 수행하는 작업을 "해체/해시 할 수 없게"할 필요가 없습니다. 이것은 암호화가 작동하는 방식이 아닙니다.

입력 된 텍스트의 해시와 예상 텍스트의 해시를 비교하면됩니다.

서버가 아마도 당신에게 해시 된 버전의 login + password를 줄 것입니다. Xcode에서 입력 된 로그인 + 암호의 해시도 계산하여 두 결과를 비교하십시오.

if ([response_of_server_containing_sha1_of_password equalsToString:[self sha1OfString:password_string_entered_by_user]]) ...

이상 아마이 비교는 아마 서버에 sha1(password_entered_by_user)를 보낼 것입니다 그리고 그들은 그들의 데이터베이스에 저장된 암호의 SHA1과 비교됩니다 의미 서버 측 이루어집니다.

어쨌든 여기에 bidirectonal 암호화가 필요없고 아무 것도 해독 할 필요가 없습니다 ("해독"/ "해시 해지").

인증 서버의 서버 측을 구현하는 사람들로부터 필요한 정보를 얻지 못한다면 분명히 해시 (md5? sha1?)와 같이 필요한 정보를 모두 얻지 않아도됩니다. 등

(. MITM 같은 보안 침해로부터 사이트를 보호하거나 공격을 재생되지 않습니다 같은 방법으로 인증을하고, 어쨌든 참고 당신이 더 보안이 필요한 경우 SSL/HTTPS 사용을 고려)

+0

서버는 실제로 내가 작성한 PHP 페이지와 암호의 MD5 해시를 보유한 mysql 데이터베이스입니다.) ... 좀 더 읽어야 할 것 같습니다. – Silvertiger

+0

그런 다음 일반적인 해결책은 간단합니다. iPhone 앱이 사용자가 입력 한 비밀번호의 MD5를 보낸 다음 서버 측에서받은 MD5를 mysql 데이터베이스에 저장된 비밀번호와 비교하고 마지막으로 서버가 OK로 응답하도록합니다 또는 KO로 pwd가 맞는지 아이폰 앱에 알릴 수 있습니다. – AliSoftware

+0

어쨌든 이것은 매우 안전하지 않은 매우 간단한 솔루션이라는 것에주의하십시오. 첫째, 요즘 MD5 대신 SHA1을 사용하는 것이 더 좋습니다. 어쨌든 제가 설명한이 절차는 적어도 MITM 공격에 대해서는 여러분을 매우 강력하게 보호하지는 못합니다. 따라서 강력한 보호가 필요하지 않지만 기본적인 보호만으로 충분할 수도 있지만 강력한 보호가 필요한 경우 최소한 HTTPS 사용 및/또는 다른 방법 (인증서, OAuth 등)을 고려하십시오. 이해하고 구현하기가 더 복잡하기 때문에 실제 보호가 필요한 경우에만이 방법을 사용하십시오. – AliSoftware