2017-06-17 7 views
0

In meiner Android App habe ich eine Hash-Zeichenfolge, die ich mit einer regulären Zeichenfolge aus einem Editiertext vergleichen möchte. Ich mache das mit den folgendenIos swift SHA1 Verschlüsselung

try { 
     MessageDigest hashDigester = MessageDigest.getInstance("SHA-1"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
return (new BigInteger(1, hashDigester.digest(pin.getBytes())).toString(16)).equals(object.getPin()); 

Der obige Code funktioniert gut. Jetzt bin Tring ich das gleiche in ios zu tun mit schnellen 3,0 Ich habe versucht Cryptoswift mit dem Hash aus der EditText zu schaffen, wie dies

text.sha1() 

und ich habe auch versucht, die Verwendung von unter

extension Data { 


    func hexString() -> String { 
     let string = self.map{String(format:"%02x", Int($0))}.joined() 
     return string 
    } 


    func SHA1() -> Data { 
     var result = Data(count: Int(CC_SHA1_DIGEST_LENGTH)) 
     _ = result.withUnsafeMutableBytes {resultPtr in 
      self.withUnsafeBytes {(bytes: UnsafePointer<UInt16>) in 
       CC_SHA1(bytes, CC_LONG(count), resultPtr) 
      } 
     } 
     return result 
    } 

} 

extension String { 

    func hexString() -> String { 
     return self.data(using: .utf8)!.hexString() 
    } 

    func SHA1() -> String { 
     return self.data(using: .utf8)!.SHA1().hexString() 
    } 

} 

Beide gaben mir das gleiche ergebnis, aber nicht dasselbe mit meinem android code. Haben Sie Vorschläge, wie sollte ich meinen Swift-Code anpassen?

+0

Können Sie ein Beispiel für eine Zeichenfolge, die Sie durchgeführt sha-1 auf, mit der Ergebnisse auf Android sowie auf iOS (dieser Code)? – paulvs

+0

wenn ich 407 in ios einfügen gibt es mir 35db01d3926745bec110d5709a544e250f7fffc4, während in android für die gleichen 407 e6de89674d9f1d7968a70dad4f41b844965b4fdc zurückgegeben, die die richtige ist – appLogic

Antwort

0

Es war mein Fehler! Die Funktionen, bei denen richtig i wurde die falsche Eingabe

0

vorbei Sie können einige kleine Verbesserungen fügen Sie den Code in Swift zu verkürzen 4:

extension Data { 

    var hexString: String { 
     return map { String(format: "%02hhx", $0) }.joined() 
    } 

    var sha1: Data { 
     var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH)) 
     self.withUnsafeBytes({ 
      _ = CC_SHA1($0, CC_LONG(self.count), &digest) 
     }) 
     return Data(bytes: digest) 
    } 

} 

extension String { 

    var hexString: String { 
     return self.data(using: .utf8)!.hexString 
    } 

    var sha1: Data { 
     return self.data(using: .utf8)!.sha1 
    } 

}