Ich denke, ich habe eine gute für Sie.
Ich habe einen C # -Code, der Strings verschlüsselt und entschlüsselt. Es sieht ungefähr so aus:
%Vor%Wenn ich in C # ver- oder entschlüssle, funktioniert es wie ein Zauber. In PHP habe ich einen Entschlüsselungsalgorithmus, der so aussieht:
%Vor%Der auskommentierte Code ist nur ein Teil der Versuche, die ich gemacht habe, um die Zeichenfolge korrekt zu dekodieren. Der komische Teil ist, dass es manchmal funktioniert und manchmal auch nicht ohne merkwürdige Zeichen.
Beispiel:
Herp Derp mit Schlüssel: Red arbeitet
Nachricht Herp Derp mit Schlüssel Schwertfisch funktioniert nicht.
Lange Nachrichten mit der roten Taste funktionieren nicht.
Keine Nachricht mit dem Schwertfisch funktioniert.
Könnte das bedeuten, dass die Länge des Nachrichtenschlüssels ein Teil des Problems ist?
Ich habe sichergestellt, dass die Nachricht und der Schlüssel korrekt zwischen dem PHP und dem C # übertragen werden, es ist definitiv ein Problem mit der Kodierung / Dekodierung und basierend auf dem Müll, der ausgespuckt wird, denke ich, dass es mit zu tun hat UTF8-Codierung . Ich vermute auch den Padding-Modus als möglichen Täter, irgendwelche Ideen? Edit: Ich habe die 1 oder 2 fehlenden Pluspunkte nicht bemerkt, die die gesamte Saite abschalten würden, Sorry Stack: \ *
Weiß jemand, wie man es repariert?
Bearbeiten Nach dem Ändern der Schlüsselgröße funktionieren keine Zeichenfolgen. Mit der Nachricht Herp Derp und dem Passwort rot werden die php-Ausgaben als . ʇ'y- US2 ~ h \ 0nAZ = \ 2 / | a R ' / decry entschlüsselt nY & lt; [B NB
Hatte das gleiche Problem vor einiger Zeit, meine Quelle wurde von "etwas" beschädigt und später entdeckt, dass es die String-Funktionen war. strpos
ist nicht UTF8-freundlich, die bloße Verwendung dieser Funktion ändert die Zeichencodierung. Als Lösung ersetzen Sie das
mit
%Vor%oder
Ein Blogbeitrag darüber, wie ich es geschafft habe, dies mit der ausgezeichneten PHP UTF8-Lib zu umgehen. Was diese Bibliothek tut, ist alles in Unicode zu konvertieren, dann können Sie von dort aus arbeiten. Es könnte in diesem Fall mühsam sein, also versuchen Sie, das oben genannte zu erreichen.
Hacke deine eigenen Utf8-fähigen String-Funktionen aus Unicode
Ich fand es ein wenig nervig, dass es nirgendwo auf der PHP-Seite so etwas gab, ich erinnere mich, dass ich dieses Problem schon einige Male in der Vergangenheit hatte.
Ressourcen
Leider stellt sich heraus, dass die Base-64-codierte Zeichenfolge + 's hat, die +, die bereits vorhanden waren, wenn URL-codiert nicht maskiert wurde, und wenn die Zeichenfolge decodiert wurde, wurden die + durch Leerzeichen ersetzt. * Es gibt einen Fehler im post-url-encode-Mechanismus? Ich sage das, weil, obwohl Leerzeichen als + codiert sind, wenn Sie bereits ein + haben, sollte es nicht mit einem Escape-Zeichen kodieren? *
Wie auch immer, ich entferne Leerzeichen in parseMsg, und was daraus resultiert, ist eine Zeichenkette, die sehr ähnlich aussieht, aber nicht genau dieselbe ist wie die Ausgabe von PHP. Es gab eigentlich kein Problem mit der Codierung der Ausgabe, und bisher war die utf8-Kodierung nicht notwendig, obwohl das wahrscheinlich darauf zurückzuführen ist, dass sie nicht gründlich genug getestet wurde.
Tags und Links c# php character-encoding utf-8 encryption