Hallo zusammen,
ich habe da ein kleines Problem mit einer Verschlüsselung von GML zu PHP und umgedreht. Ich würde die Übertragungen gerne vorher verschlüsseln, damit man die Nachricht die an PHP (oder umgedreht) gesendet wurde nicht erspähen kann (z.B. für online Highscores!)
Das Problem dabei ist nur, das zunächst wirklich keine Verschlüsselung mit PHP gut funktioniert hat. Bei der AES Extension für den GM klappt das schon mal überhaupt nicht ordentlich. Anscheinend wird hier das ganze etwas anders berechnet, zumindest stimmt das Ergebnis nicht. Nun ja, nachdem ich auch Blowfish und andere Verschlüsselungs-Algorithmen durchprobiert habe, funktionierte nun endlich einigermaßen ein Algorithmus, und zwar RC4.
Allerdings funktioniert dieser nicht immer in PHP und entschlüsselt gelegentlich das ganze total falsch, und zwar dann, wenn bestimmte Sonderzeichen zum Einsatz kommen wie z.B. @ Zeichen. Hier mal der Code:
Alles anzeigen
Und hier der GML-Code (Gamemaker 8.1):
Alles anzeigen
Irgendwo ist da der Wurm drin. Vielleicht hat da jemand eine Lösung für das Problem? Oder evtl. sogar eine bessere Idee die Übertragung effektiv zu verschlüsseln?
Würde mir jedenfalls sehr helfen
ich habe da ein kleines Problem mit einer Verschlüsselung von GML zu PHP und umgedreht. Ich würde die Übertragungen gerne vorher verschlüsseln, damit man die Nachricht die an PHP (oder umgedreht) gesendet wurde nicht erspähen kann (z.B. für online Highscores!)
Das Problem dabei ist nur, das zunächst wirklich keine Verschlüsselung mit PHP gut funktioniert hat. Bei der AES Extension für den GM klappt das schon mal überhaupt nicht ordentlich. Anscheinend wird hier das ganze etwas anders berechnet, zumindest stimmt das Ergebnis nicht. Nun ja, nachdem ich auch Blowfish und andere Verschlüsselungs-Algorithmen durchprobiert habe, funktionierte nun endlich einigermaßen ein Algorithmus, und zwar RC4.
Allerdings funktioniert dieser nicht immer in PHP und entschlüsselt gelegentlich das ganze total falsch, und zwar dann, wenn bestimmte Sonderzeichen zum Einsatz kommen wie z.B. @ Zeichen. Hier mal der Code:
PHP-Quellcode
- <?php
- function rc4($text,$hiddenkey) {
- $str = $text;
- $key = $hiddenkey;
- $out = "";
- $len = strlen($key);
- for ($i=0; $i<256; $i+=1) {$S[$i] = $i;}
- $j = 0;
- for ($i=0; $i<256; $i+=1) {
- $j = ($j + $S[$i] + ord(substr($key,($i % $len),1))) % 256;
- $temp = $S[$i];
- $S[$i] = $S[$j];
- $S[$j] = $temp;
- }
- $i = 0;
- $j = 0;
- for ($pos=0; $pos<strlen($str); $pos+=1) {
- $i = ($i + 1) % 256;
- $j = ($j + $S[$i]) % 256;
- $temp = $S[$i];
- $S[$i] = $S[$j];
- $S[$j] = $temp;
- $t = ($S[$i] + $S[$j]) % 256;
- $addpos = $pos;
- $out .= chr(ord(substr($str,$addpos,1)) ^ $S[$t]);
- }
- return $out;
- }
- ?>
Und hier der GML-Code (Gamemaker 8.1):
GML-Quellcode
- {
- var str,key,out,len,i,S,j,temp,pos,t;
- str = argument0;
- key = argument1;
- out = "";
- len = string_byte_length(key);
- for (i=0; i<256; i+=1) S[i] = i;
- j = 0;
- for (i=0; i<256; i+=1) {
- j = (j + S[i] + string_byte_at(key,(i mod len)+1)) mod 256;
- temp = S[i];
- S[i] = S[j];
- S[j] = temp;
- }
- i = 0;
- j = 0;
- for (pos=0; pos < string_byte_length(str); pos+=1) {
- i = (i + 1) mod 256;
- j = (j + S[i]) mod 256;
- temp = S[i];
- S[i] = S[j];
- S[j] = temp;
- t = (S[i] + S[j]) mod 256;
- out += ansi_char(string_byte_at(str,pos+1) ^ S[t]);
- }
- return out;
- }
Irgendwo ist da der Wurm drin. Vielleicht hat da jemand eine Lösung für das Problem? Oder evtl. sogar eine bessere Idee die Übertragung effektiv zu verschlüsseln?
Würde mir jedenfalls sehr helfen
