[BMAX vs. PHP] Verschlüsselung portieren

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Justus

Betreff: [BMAX vs. PHP] Verschlüsselung portieren

BeitragDo, Jun 08, 2006 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin dabei, die von Triton in folgendem Thread präsentierte Verschlüsselung auf PHP und BlitzMax zu portieren/übersetzen: https://www.blitzforum.de/foru...php?t=6957

Dabei ergibt sich - wie ich nach gründlicher Recherche meinerseits - das Problem, dass der Befehl XOR in PHP nicht genauso funktioniert wie in BlitzMax (~). Also alle errechnten Werte wie $zeichen oder $code stimmen mit den BlitzMax-Werten überein.

Ich weiß nicht warum und möchte gerne von euch wissen, ob und wie man Abhilfe schaffen kann.

Hier sind die beiden Codes:

BlitzMax
Code: [AUSKLAPPEN]
Function cryptString:String(line:String , pass:String)
   Local lengthPass:Int = Len(pass)
   Local lengthLine:Int = Len(line)
   Local result:String
   Local zahl:Int
   Local code:String
   Local zeichen:String
   For I = 1 To lengthLine
        zahl      = ((zahl+1) Mod lengthPass)
        code    = Mid(pass,zahl+1,1)
       zeichen     = Mid(line , I , 1)
       result     = result + Chr(Asc(zeichen) ~ Asc(code) * I)
   Next
   Return result
EndFunction


PHP
Code: [AUSKLAPPEN]
<?php

 function cryptString($line,$pass) {
  $lengthPass = strlen($pass);
  $lengthLine = strlen($line);
  for ($i=1; $i<=$lengthLine; $i++) {
   $zahl = (($zahl+1)%$lengthPass);
   $code = substr($pass,$zahl,1);
   $zeichen = substr($line,$i-1,1);
   $ordzeichen = ord($zeichen);
   $ordcode = ord($code)*$i;
   $result = $result.chr($ordzeichen XOR $ordcode);
  }
  return $result;
 }

?>

simi

BeitragFr, Jun 09, 2006 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.daniweb.com/techtal...15795.html
http://tut.php-q.net/logical.html#u9
=> http://www-cgi.uni-regensburg....nfuehrung/

benutze in php "^", das ist das bitweise XOR. XOR ist ein logischer Operator....

ich hoffe das funktioniert dann auch so.ö.... Wink
 

SlasHeR

BeitragSo, Jun 11, 2006 10:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann das XOR laut Aussagenlogik glaube ich auch so schreiben:

(!p || !q ) && (p || q)

Zumindest ist der Ausdruck äquivalent dazu.
 

Dreamora

BeitragSo, Jun 11, 2006 11:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Fast

(a && !b) || (!a && b)


Das ist allerdings keine Operation die eine Bitfolge erzeugt sondern ein logischer Test.

Die Operation dazu wäre:

a :& ~b bzw. c = a & ~b
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

SlasHeR

BeitragSo, Jun 11, 2006 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
Fast

(a && !b) || (!a && b)


Ja das ist ebenfalls äquivalent...

Zitat:

Das ist allerdings keine Operation die eine Bitfolge erzeugt sondern ein logischer Test.

Die Operation dazu wäre:

a :& ~b bzw. c = a & ~b

Gut möglich Wink

Justus

BeitragDi, Jun 13, 2006 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
So... Natürlich wäre das ganze viel zu einfach, wenn es mit einem von Dreamoras genialen Ratschlägen gelöst wäre Wink Ich fürchte ich muss euch nochmal heranbitten, denn ich habe weitere Entdeckungen gemacht.

Sowohl Dreamoras Methode mit "&~" als auch ein einfaches "^", wie auf folgender Seite beschrieben, funktionierten nicht. http://www.html-world.de/progr...operatoren

Es kann nur an dieser Exclusive Or Operation liegen, wie meine etwas erweiterten Beispiele zeigen. Alle ASCII-Codes stimmen überein, doch das Ergebnis nicht.

PHP:
Code: [AUSKLAPPEN]
<?php

 function cryptString($line,$pass) {
  $lengthPass = strlen($pass);
  $lengthLine = strlen($line);
  for ($i=1; $i<=$lengthLine; $i++) {
   $zahl = (($zahl+1)%$lengthPass);
   $code = substr($pass,$zahl,1);
   $zeichen = substr($line,$i-1,1);
   $ordzeichen = ord($zeichen);
   $ordcode = ord($code)*$i;
   Print $ordcode."|".$ordzeichen."<br>";
   $result = $result.chr(($ordzeichen^$ordcode));
  }
  return $result;
 }
 
Print cryptString("Blitzforum","Passwort");

?>


Gibt aus:
Zitat:
97|66
230|108
345|105
476|116
555|122
684|102
812|111
640|114
873|117
1150|109
#Š0¨QÊCò



BlitzMax:
Code: [AUSKLAPPEN]
Print cryptString("Blitzforum","Passwort")

Function cryptString:String(line:String , pass:String)
   Local lengthPass:Int = Len(pass)
   Local lengthLine:Int = Len(line)
   Local result:String
   Local zahl:Int
   Local code:String
   Local zeichen:String
   For I = 1 To lengthLine
        zahl      = ((zahl+1) Mod lengthPass)
        code    = Mid(pass,zahl+1,1)
       zeichen     = Mid(line , I , 1)
      Print Asc(code)*I+"|"+Asc(zeichen)
        result    = result+Chr(Asc(zeichen) ~ Asc(code)*I)
   Next
   Return result
EndFunction


Gibt folgendes aus:

Zitat:
97|66
230|108
345|105
476|116
555|122
684|102
812|111
640|114
873|117
1150|109
#Šİƨɑˊ̓˲̜Г

poet

BeitragMi, Jun 14, 2006 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke es liegt einfach noch an der richtigen Reihenfolge der Operationen.
Das ~ hat Vorrang vor dem *.

Versuch's mal mit folgender Zeile:

result = result+Chr(Asc(zeichen) ~ (Asc(code)*I))

poet

BeitragMi, Jun 14, 2006 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, zu schnell gedacht ;)

Wenn sich die Operanden Reihenfolge in BlitzBasic nicht geändert hat, dann ist eigentlich der Code in PHP falsch.

Da darfst du dann die Multiplikation eben nicht zuerst und nur auf "code" ausführen.

Also:
$result = $result.chr(($ordzeichen^$ordcode)*$i);

Justus

BeitragMi, Jun 14, 2006 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Falsch. Wieso sollte es auch richtig sein, schließlich entsprechen ordcode und ordzeichen ihren BMAX-Äquivalten. Es kann also nur am dem bitweisen Operator liegen.

simi

BeitragMi, Jun 14, 2006 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
mh, also bei mir gehts...... Bei BlitzMax gibts bei mir das genau gleiche, was du beim PHP-Code angegeben hast.
Allerdings habe ich mir den verschlüsselten String nicht in das Debug-Fenster ausgegeben, da dieses ja bekanntlich Probleme mit Sonderzeichen hat Razz. Gibs mal in eine Datei aus, oder erstelle ein Fester mit diesem Titel (ich habs mit zweiterem gemacht).....

Viel Spass! Smile

Justus

BeitragMi, Jun 14, 2006 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
AHHHHHH!!!!

Wie kommst du nur auf solche Ideen, simi? ^^ Ich komme jedenfalls nicht darauf. Natürlich mit der Folge, fatale Fehleinschätzungen wie diese abzugeben...

Vielen vielen Dank für das Öffnen meiner blinden Augen Very Happy

Aber ehrlich gesagt hatte ich von dieser Schwäche der Debugausgabe nicht gewusst ^^ Aber das ist ja egal, ich will ja schließlich nicht anzeigen, sondern nur verschlüsseln...

poet

BeitragMi, Jun 14, 2006 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Oha, ja, die Operatoren laufen schon in der richtigen Reihnfolge. Hab in der Doku nur auf "Bitwise complement" geschaut. Das funktioniert genau wie "Bitwise exclusive or" mit dem ~. Und ersteres wir nun mal vor einer Multplikation ausgeführt. Naja ...

Aber simi hat recht. Da gibts eh kein Problem. Nur wird der String aus Sonderzeichen in HTML halt anders ausgegeben als in der BlitzMax Console.

Bau mal
print ($ordzeichen ^ $ordcode)."<br>";
bzw.
Print Asc(zeichen) ~ (Asc(code)*I)
ein. Dann siehts du's ...

Justus

BeitragMi, Jun 14, 2006 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
-------------------------------------------------
https://www.blitzforum.de/foru...hp?t=18370
-------------------------------------------------

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group