[BMAX vs. PHP] Verschlüsselung portieren
Übersicht

![]() |
JustusBetreff: [BMAX vs. PHP] Verschlüsselung portieren |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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.ö.... ![]() |
||
SlasHeR |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Man kann das XOR laut Aussagenlogik glaube ich auch so schreiben:
(!p || !q ) && (p || q) Zumindest ist der Ausdruck äquivalent dazu. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
So... Natürlich wäre das ganze viel zu einfach, wenn es mit einem von Dreamoras genialen Ratschlägen gelöst wäre ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Viel Spass! ![]() |
||
![]() |
Justus |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
-------------------------------------------------
https://www.blitzforum.de/foru...hp?t=18370 ------------------------------------------------- |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group