digest von HMAC-sha256

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • digest von HMAC-sha256

    Hallo Zusammen

    ich hoffe von euch kann mir jemand helfen.
    Ich bin noche ein Swift "frischling" und versuche ein App zu programmieren.
    Mit mehr oder weniger grossem Erfolg. :S ^^

    Ich habe lange an der API schnittstelle rumgebastelt dann habe ich rausgefunden, das ich dass meiste nicht mit der API sondern mit der websocket API machen muss.
    Nun versuche ich einen connect hinzubekommen resp die Authentifizierung.

    ich bekomme die irgendiwe nicht hin...
    Was muss ich machen:
    Client signature (digest of HMAC-rsa256 with client's API Secret Key, applied to the string, which is concatenation timestamp and API Key)
    Sample in Python:

    Python-Quellcode

    1. import hmac
    2. import hashlib
    3. import datetime
    4. import json
    5. # Python 2.7
    6. #
    7. def create_signature_Py27(key, secret): # (string key, string secret)
    8. timestamp = int(datetime.datetime.now().timestamp()) # UNIX timestamp in seconds
    9. string = "{}{}".format(timestamp, key)
    10. return hmac.new(secret, string, hashlib.sha256).hexdigest()
    11. # Python 2.7 - 3.5+
    12. # Note: latest versions of hmac lib requires 'secret' and 'string' as byte strings but not unicode
    13. #
    14. def create_signature(key, secret): # (string key, string secret)
    15. timestamp = int(datetime.datetime.now().timestamp()) # UNIX timestamp in seconds
    16. string = "{}{}".format(timestamp, key)
    17. return timestamp, hmac.new(secret.encode(), string.encode(), hashlib.sha256).hexdigest()
    18. def auth_request(key, secret):
    19. timestamp, signature = create_signature(key, secret)
    20. return json.dumps({'e': 'auth',
    21. 'auth': {'key': key, 'signature': signature, 'timestamp': timestamp,}, 'oid': 'auth', })
    22. auth_request = auth_request('1WZbtMTbMbo2NsW12vOz9IuPM', '1IuUeW4IEWatK87zBTENHj1T17s')
    Alles anzeigen



    nun ich habe dann versucht:

    Quellcode

    1. let Timestamp = Date().timeIntervalSince1970
    2. let RequestSignature: String = "\(Timestamp)" + UserKey + UserSecret
    3. let CryptSignature: String = RequestSignature.sha256()
    4. let AuthDetailArray: ApiAuth.ApiAuthDetail = ApiAuth.ApiAuthDetail(key: UserKey, signature: CryptSignature, timestamp: Timestamp)
    5. let AuthArray: ApiAuth = ApiAuth(e: "auth", auth: AuthDetailArray, timestamp: Timestamp)
    Importiert habe ich IDZSwiftCommonCrypto das macht das coding.



    hier sind die sample daten:
    Test case 1 for createSignature:
    ParameterValue
    apiSecret1IuUeW4IEWatK87zBTENHj1T17s
    timestamp1448034533
    apiKey1WZbtMTbMbo2NsW12vOz9IuPM
    signature7d581adb01ad22f1ed38e1159a7f08ac5d83906ae1a42fe17e7d977786fe9694

    Note: timestamp 1448034533 means Fri Nov 20 2015 17:48:53 GMT+0200 (EET)
    Test case 2 for createSignature:
    ParameterValue
    apiSecret1IuUeW4IEWatK87zBTENHj1T17s
    timestamp1448035135
    apiKey1WZbtMTbMbo2NsW12vOz9IuPM
    signature9a84b70f51ea2b149e71ef2436752a1a7c514f521e886700bcadd88f1767b7db

    Note: timestamp 1448035135 means Fri Nov 20 2015 17:58:55 GMT+0200 (EET)


    nun ich bekomme es irgendiwe nicht hin...
    kann mir bitte jemand helfen?

    Gruss
  • Für Leute, die sich nicht seit Tagen mit Deiner Aufgabenstellung befassen - oder zumindest für mich - ist schwer nachzuvollziehen, was eigentlich Deine Frage ist: Du versuchst gerade Python-Code zur Erstellung eines SHA-256 Hashes in Swift nachzubilden, richtig? Die Bemerkungen bzgl. API verwirren dabei mehr als sie helfen. Ausserdem ist es immer etwas schwierig zu helfen, wenn jemand für sein Projekt Fremdcode verwendet ... das setzt ja voraus, dass man selber Erfahrung mit diesem hat.

    Vielleicht kannst Du Deine Fragestellung auf das wesentliche konzentrieren und vor allem auch die Information liefern, was denn konkret nicht geht. Wir können leider nicht hellsehen...

    Mattes

    Edit: Ich sehe übrigens in Deinem Swift-Code keine Stelle, in der Du die HMAC-Methoden von IDZSwiftCommonCrypto verwendest ... oder bin ich blind?
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()

  • Danke schon mal für deine Antwort.
    Du hast recht ich habe das falsche kopiert sorry...

    Hier mein swift code:

    Quellcode

    1. let testTimeStamp = 1448034533
    2. let testKey = "1WZbtMTbMbo2NsW12vOz9IuPM"
    3. let testSecret = "1IuUeW4IEWatK87zBTENHj1T17s"
    4. let timeKey = "\(testTimeStamp)" + testKey
    5. let testHcmaDone = HMAC(algorithm: .sha256, key:testSecret).update(string: timeKey)?.final()
    6. var testDigest = Digest(algorithm:.md5)
    7. let temSig = testDigest.update(byteArray: testHcmaDone!)?.final()
    8. let signature2 = hexString(fromArray: temSig!)

    Ich konzentriere mich auf das wesentlich. Damit ich erfolgreich ein API request machen kann, brauche ich eine gültige Signatur ohne die kriege ich keine Daten.

    Ich muss mit den informationen oben eine solche signatur erstellen. (Client signature (digest of HMAC-sha256 with client's API Secret Key, applied to the string, which is concatenation timestamp and API Key))
    Nach ein paar stunden googeln bin ich dann auf IDZSwiftCommonCrypto gekommen, dieser stellt mir alle funktionen bereit die ich bruache.
    (denke ich)

    Sollte es einfach gehen bin ich auch sehr froh :-).

    Der Python code ist nur als orientierung gedacht ,da es mit Phyton super funktioniert, nur leider nicht mit swift.

    Es geht also nur am das erstellen dieser Signatur um nicht anders, das encoding mit json geht ja mit swift 4 relativ einfach.
  • Okay, abgesehen davon, dass Du leider noch immer nicht gesagt hast, was nicht funktioniert ... ich vermute einmal , der gelieferte HMAC entspricht einfach nicht dem erwarteten:

    Ich gebe zu, nur aus der Hüfte zu schiessen, aber ist vielleicht der String, den Du an die HMAC-Methode übergibst, nicht so codiert wie diese ihn erwartet? Also z. B. ein UTF16 statt Latin-1 oder so...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • ich habs gerade geschafft...

    das ist die Lösung:

    Quellcode

    1. let testTimeStamp = 1448034533
    2. let testKey = "1WZbtMTbMbo2NsW12vOz9IuPM"
    3. let testSecret = "1IuUeW4IEWatK87zBTENHj1T17s"
    4. let timeKey = "\(testTimeStamp)" + testKey
    5. let testHcmaDone = HMAC(algorithm: .sha256, key:testSecret).update(string: timeKey)!.final()
    6. let test = arrayFrom(hexString: "7d581adb01ad22f1ed38e1159a7f08ac5d83906ae1a42fe17e7d977786fe9694")
    7. let test2 = hexString(fromArray: test)

    es war scheinbar nie nötig ein digest zu machen...
    dies wird scheinbar schon der funktion übernommen.
  • matz schrieb:

    Was man auch relativ schnell findet wenn man den "geklauten" Code schaut. Du hättest ja wenigstens mal die Quellen anfügen können statt sowas hier hin zu rotzen.
    Danke schon mal für die nette Begrüssung :D

    Eine Quellenangabe vom Phython code oder von den test Signaturen hätte dir sicherlich extrem weitergeholfen...
    Pampige Antworten geben kann jeder, weiterhelfen konntest du aber scheinbar nicht.
    Im übrigen habe ich mit keiner Silbe erwähnt das dies mein Code ist.
    Der Swift code ist von mir der rest nicht.