Naja soweit ich bei mir getestet habe gab diese AutoIt Funktion egal bei welchen Zeitzonen Einstellungen immer den normal unix timestamp zurück der identisch mit der PHP time Funktion war
Problem mit RC4 verschlüsselung
-
Tyzer -
27. März 2019 um 19:41 -
Erledigt
-
-
Ok ich hab das Problem gefunden, und zwar benutze ich die ersten 8 Stellen des Unix Timestamps für die Verschlüsselung, extra nur die ersten 8 Stellen um irgendwelche lags möglichst zu umgehen, wenn nun das Autoit Skript einen anderen Timestamp angibt wie der Server gibt es eine out of sync Rückmeldung und das Skript probiert es nochmal.
Auf jeden Fall ist es nun bei manchen Usern so, dass sie eine ganz andere Zeit als mein Server bekommen.Du möchtest vermutlich einen Timestamp verwenden, damit sich der Key in regelmäßigen Abständen ändert, korrekt ?
1.
Eine Möglichkeit wäre es, einen 'echten' Zeitserver zu nutzen (Stichwort : NTP Server).
Hier muss meines Wissens aber ein spezielles Protokoll beachtet werden.
(Beispiele liefert Dir die Suchmaschine Deines Vertrauens )
2.
Es gibt Websites, die Dir direkt die UTC (Weltzeit) zurückliefern. Ein Beispiel, welches Du bei einer Recherche häufiger finden wirst ist : http://www.timeapi.org/utc/now
Hier würde folgender Code bereits ausreichen :
$sUTCNow = BinaryToString(InetRead("http://www.timeapi.org/utc/now"))
ConsoleWrite("! UTC = " & $sUTCNow & @CRLF)
Leider ist http://www.timeapi.org/utc/now seit geraumer Zeit (2017 ?) down.
Auch hierfür gibt es Alternativen, allerdings habe ich da keinen Favoriten.
3.
(ggf. der einfachste Weg)
Viele 'normale' Websites haben bereits einen UTC-Datumsheader in ihren Responses - z.B. Google.
Hier ein Skript von UEZ :
C
Alles anzeigen; https://www.autoitscript.com/forum/topic/169356-how-to-get-the-current-date-from-the-internet/?do=findComment&comment=1294626 #include <Array.au3> Global $iError = 0, $oErrorChk = ObjEvent("AutoIt.Error", "ObjErrChk") $aResult = GetDateFromINet() If @error Then ConsoleWrite("Error connecting to internet!" & @CRLF) Else _ArrayDisplay($aResult) EndIf Func GetDateFromINet($bProxy = False, $sProxy = "", $sURL = "http://www.google.com/") Local $oHTTP = ObjCreate("winhttp.winhttprequest.5.1") If $iError Then Return SetError(1, 0, 0) If $bProxy Then $oHttp.SetProxy(2, $sProxy) $oHTTP.Open("GET", $sURL, False) $oHTTP.Send() If $iError Then Return SetError(2, 0, 0) Local $sDate = $oHTTP.GetResponseHeader("Date") ConsoleWrite($sDate & @CRLF) ; *** nur zur Anzeige ; Jahr ermitteln : Local $sYear = StringRegExpReplace($sDate, ".+,\s*\d+\s*\w+\s*(20\d+)\s*.*", "$1") ; Monat ermitteln : Local $iMonth, $aMonth[13] = [12, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dez"] $iMonth = _ArraySearch($aMonth, StringRegExpReplace($sDate, ".+,\s*\d+\s*(\w+)\s*20\d+\s*.*", "$1")) ; Tag ermitteln : Local $iDay, $aDay[8] = [7, "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] $iDay = StringRegExpReplace($sDate, ".+,\s*(\d+)\s*\w+\s*20\d+\s*.*", "$1") $oHTTP = Null Local $aDate[3] = [$sYear, StringFormat("%02i", $iMonth), StringFormat("%02i", $iDay)] Return $aDate EndFunc Func ObjErrChk() $iError += 1 ConsoleWrite($oErrorChk.scriptline & @CRLF) ConsoleWrite($oErrorChk.windescription & @CRLF) ConsoleWrite($oErrorChk.number & " / " & Hex($oErrorChk.number) & @CRLF) EndFunc
Die Rückgabe von Google sieht wie folgt aus : Thu, 28 Mar 2019 17:37:41 GMT
Das Skript von UEZ generiert daraus das Array :
[0] 2019 (Jahr)
[1] 03 (Monat)
[2] 28 (Tag)
Dies könntest Du auch in PHP so machen.
Idee (ungetestet) :
Um Dir die ganze Umformerei zu sparen, könntest Du den Teilstring Thu, 28 Mar 2019 nehmen, und den MD5-Hash bilden (dieser hat immer die Länge 32, wäre als Key also gut geeignet) .
EDIT : Alternativ kannst Du auch nur die ersten 8 Stellen des Hashes nehmen, so wie jetzt.
Es geht Dir ja nicht um das Datum an sich, sondern um einen wechselnden Key.
Gruß Musashi
-
Ja korrekt du hast genau verstanden worum es mir geht, ich hab das ein wenig anders gelöst, meine PHP hat nun einfach eine gewisse Toleranz falls der Timestamp nicht synchron ist, in diesem Fall benutzt er dann denn Timestamp des Clients als Key. (der Timestamp ist natürlich nicht das einzige das den Key bildet)
Ich hatte auch kurz darüber nachgedacht die Zeit aus dem Netz zu holen aber da wäre es ja auch zu Delays gekommen daher war die Toleranz so oder so nötig
Aufjedenfall ist das ganze jetzt gelöst
Danke für all deine Hilfe hier du bist wirklich super hilfsbereit
-