• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Passwortfeld Vergleich (MD5 oder SHA) in App Quellcode verschlüssen

belinea

deaktivierter Benutzer
Registriert
12.07.08
Beiträge
351
Ein

Code:
if label.text == "meinpasswort"

und somit dass Passwort im Klartext im Quellcode zu speichern ist natürlich nicht schön. In PHP reicht dazu eine Codezeile aus um ein Passwort mid MD5 oder SHA zu verschlüsseln. Dazu noch einen Salt Wert und die Passwortabfrage sollte relativ sicher sein.

In Swift scheint es aber so eine einfache Funktion nicht zu geben. Im Internet habe ich die abenteuerlichste Konstrukte gefunden, die aber alle nur in Fehlermeldungen enden.

Wie würdet ihr ein Passwort im App Quellcode sichern. Eine Funktion für MD5 wäre eigentlich sehr hilfreich, da in der Datenbank eh schon die MD5 Hashes samt dem Salt Wert gespeichert sind. Somit könnte ich alle bisherigen Passwörter der Nutzer die eh schon in MySQL vorhanden sind weiter verwenden.

Ist aber kein muss falls es so eine Funktion nicht gibt. Mir würde vorerst ausreichen das Passwort nicht im Klartext zu speichern.

Hier wäre so ein Beispiel Code, der aber irgendeine Crypto Library benötigt (<CommonCrypto/CommonCrypto.h>). Und so ohne weiteres nicht lauffähig ist.
Code:
extension String{var md5:String!{let str =self.cStringUsingEncoding(NSUTF8StringEncoding)let strLen = CC_LONG(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))let digestLen =Int(CC_MD5_DIGEST_LENGTH)let result =UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen)
CC_MD5(str!, strLen, result)
var hash =NSMutableString()for i in0..<digestLen {
hash.appendFormat("%02x", result[i])}
result.dealloc(digestLen)
returnString(format: hash)}}
 

bluefirex

Rhode Island Greening
Registriert
13.10.10
Beiträge
482
Auch wenn jetzt keine technische Lösung folgt, bitte beachten:
NICHT MEHR MD5 VERWENDEN. Egal für was. Nie wieder einsetzen.

MD5 hat eine sehr Kollisionsrate (= es gibt mehrere Strings, die den selben Hash haben und damit geknackt werden können) und gilt damit als unsicher. Auch SHA1 erfolgt gerade dieses Schicksal.

Als Alternative empfehle ich nach aktuellem Stand das HMAC-Verfahren. Für die interessierten, gibt es (wie immer) auf Wikipedia einen Artikel dazu: https://de.wikipedia.org/wiki/Keyed-Hash_Message_Authentication_Code

Davon abgesehen rate ich generell zum Einsatz einer CryptoLibrary. Gute Verschlüssungen sollte man nicht selbst schreiben. CommonCrypto ist dabei auch ziemlich gut darin. Hier mehr zu HMAC mit CommonCrypto in Swift: http://stackoverflow.com/questions/24099520/commonhmac-in-swift
 
  • Like
Reaktionen: belinea und wheeler

belinea

deaktivierter Benutzer
Registriert
12.07.08
Beiträge
351
Vielen Dank für deine ausführliche Antwort und deine Berechtigte Warnung vor veralteter Verschlüsselung. Viel zu oft liest man ".... Datenbank mit Nutzerdaten gestohlen".

Über das Beispiel bin ich auch schon gestolpert, aber habe es verworfen,da ich mit PHP kompatibel bleiben muss. Ich will mit die App und das Web Frontend nutzen. Aber ich sehe gerade dass HMAC von PHP von Haus aus unterstützt wird. Da reicht eine einzige Codezeile und man ist fertig.

Dann müssten sich die Nutzer ein neues Passwort vergeben beim nächsten einloggen, aber das wäre zu verkraften.