Portal > Foren > PHP > PHP-Programmierung > Cäsarverschlüsselung in PHP
Antwort
 
Themen-Optionen
Alt 12.11.2006, 14:04 Nach oben    #1
/(bb|[^b]{2})/
 
Registriert seit: 05.11.2006
Beiträge: 29
Standard Cäsarverschlüsselung in PHP

Hi!

Ich will eine Variante der Cäsar-Verschlüsselung machen, bei der die Verschiebung hin und her pendelt. Hier mein Code:
PHP-Code:
<?php error_reporting(E_ALL); ?>

<html>
<head><title>starke Verschlüsselung</title></head>
<body>

<?php

$max
=10;

//Cäsar-Verschlüsselung
if (!isset($_GET['caesarv']) or $_GET['caesarv']==""){}
else
{
  
$Verschiebung=0;$i=0;$decode=urldecode($_GET['caesarv']); $verschluesselung='';
   while(
$i strlen($_GET['caesarv']))
    {
      if (
$Verschiebung==0)
      {
        for (
$Verschiebung=0;$Verschiebung<=$max,$i<strlen($decode);$Verschiebung++,$i++)
        {
          
$zeichen=ord(urldecode($_GET['caesarv']{$i}))+$Verschiebung;
          if (
$zeichen>255)
          {
            
$verschluesselung .= chr($zeichen-255);
          }
          else
          {
            
$verschluesselung .= chr($zeichen);
          }
          }
        }
      else if (
$Verschiebung==$max)
      {
        for (
$Verschiebung=$max;$Verschiebung>=0,$i<strlen($decode);$Verschiebung--,$i++)
        {
          
$zeichen=ord(urldecode($_GET['caesarv']{$i}))+$Verschiebung;
          if (
$zeichen>255)
          {
            
$verschluesselung .= chr($zeichen-255);
          }
          else
          {
            
$verschluesselung .= chr($zeichen);
          }
          
          }
      }
      }
    echo 
htmlentities($verschluesselung,ENT_QUOTES,'ISO-8859-1');
}

//Cäsar-Entschlüsselung
if (!isset($_GET['verschluesselung']) or $_GET['verschluesselung']=="") {}
else
{
  
$Verschiebung=0;$i=0;$urldecode=rawurldecode($_GET['verschluesselung']); $entschluesselung='';
   while(
$i strlen($urldecode))
    {
      if (
$Verschiebung==0)
      {
        for (
$Verschiebung=0;$Verschiebung<=$max,$i<strlen($urldecode);$Verschiebung++,$i++)
        {
          
$zeichen=ord(rawurldecode($_GET['verschluesselung']{$i}))-$Verschiebung;
         if (
$zeichen<0)
         {
           
$entschluesselung .= chr($zeichen+255);
         } 
         else
         {
           
$entschluesselung .= chr($zeichen);
         } 
         }
       }
     else if (
$Verschiebung==$max)
      {
        for (
$Verschiebung=$max;$Verschiebung>=0,$i<strlen($urldecode);$Verschiebung--,$i++)
        {
          
$zeichen=ord(rawurldecode($_GET['verschluesselung']{$i}))-$Verschiebung;
          if (
$zeichen<0)
         {
           
$entschluesselung .= chr($zeichen+255);
         } 
         else
         {
           
$entschluesselung .= chr($zeichen);
         } 
                    
        }
      }
      }
    echo 
"<br><br><br> $entschluesselung <br><br><br>".htmlentities($urldecode,ENT_QUOTES,'ISO-8859-1');
}
?>
<br><br>
Hier können Sie einen beliebigen Text mit einer auf der Cäsar-Verschlüsselung basierenden Technik verschlüsseln!
<form action='caesarverschluesselung.php' method='get' accept-charset="ISO-8859-1">
<table border='0' cellpadding='0' cellspacing='4'>
<tr>
<td align='right'>Text:</td>
<td><textarea class='mOFF' cols='50' rows='10' name='caesarv'></textarea></td>
</tr><tr>
<td align='right'><input type='submit' value='Verschlüsseln!'></td>
</tr></table></form>


<br><br>
Und hier können Sie einen mit dieser Seite verschlüsselten Text wieder entschlüsseln!
<form action='caesarverschluesselung.php' method='get' accept-charset="ISO-8859-1">
<table border='0' cellpadding='0' cellspacing='4'>
<tr>
<td align='right'>Text:</td>
<td><textarea class='mOFF' cols='50' rows='10' name='verschluesselung' wrap='off'></textarea></td>
</tr><tr>
<td align='right'><input type='submit' value='Entschlüsseln!'></td>
</tr></table></form>


</body>
</html>
Leider funktioniert das nicht, und ich habe keine Ahnung warum. Wenn ich einen längeren Text eingebe, den verschlüssele und dann wieder entschlüssele, kriege ich einige richtige Wörter, und danach kommt Zeichenwirrwarr. Weiß jemand, woran es liegt?
Ilinsekt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2006, 14:49 Nach oben    #2
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 508
Standard

also ich würde ne cäsarverschlüsselung einfach so machen:
php Code:
  1. $alpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  2. $cipher = substr($alpha, $n, 26 - $n) . substr($alpha, 0, $n) . substr($alpha, 26+$n, 52-$n) . substr($alpha, 26, $n);
  3. return strtr($str, $alpha, $cipher);
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2006, 14:52 Nach oben    #3
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.203
Standard

2 Punkte, die uns das leichter machen würden:

1) gib anstelle eines vorgegebenen Dateinamen bei action doch einfach
PHP-Code:
<?php echo $_SERVER['PHP_SELF']; ?>
ein. Vorteil: Egal, wie das Skript heißt - es ruft sich selbst auf.

2) Wenn du das verschlüsselte gleich in die untere Textarea packst, dann kann man das sofort wieder entschlüsseln - somit würde es wieder oben drin stehen....
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2006, 15:03 Nach oben    #4
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
<?php echo $_SERVER['PHP_SELF']; ?>
kann gefährlich werden - ich weiß nciht mehr genau warum, aber es gibt da eine Lücke. Nutze lieber
PHP-Code:
<?php echo basename($_SERVER['PHP_SELF']); ?>
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2006, 15:07 Nach oben    #5
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.203
Standard

Zitat:
Zitat von Chr!s Beitrag anzeigen
kann gefährlich werden
dazu _will_ ich mehr wissen!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2006, 16:07 Nach oben    #6
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
Zitat von Jann Hendrik Beitrag anzeigen
Zitat:
Zitat von Chr!s Beitrag anzeigen
kann gefährlich werden
dazu _will_ ich mehr wissen!
Schau mal hier:
http://www.php-faq.de/q/q-konfiguration-cgi.html
Zitat:
PHP berechnet nun den Wert der Variablen $_SERVER['PHP_SELF'] auf andere Weise, falls enable-force-cgi-redirect in Kraft ist: In diesem Fall enthält die Variable wirklich nur den Namen des Scriptes ohne den Pfad zum PHP-Interpreter. Ist der Interpreter jedoch ohne diese Einstellung übersetzt worden, ist der Name des PHP-Interpreters Bestandteil von $_SERVER['PHP_SELF']. Dies ist ein Hinweis auf ein schweres Sicherheitsproblem. Der Interpreter sollte ausgetauscht werden durch eine Version, die mit enable-force-cgi-redirect übersetzt wurde.
Wobei das nicht war, was ich eigentlich gesucht hatte..
Ich weiß es nicht mehr, tut mir leid. Vielleicht habe ich das ganze auch etwas falsch in Erinnerung. Streich das Mal
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2006, 16:23 Nach oben    #7
/(bb|[^b]{2})/
 
Registriert seit: 05.11.2006
Beiträge: 29
Standard

Zitat:
Zitat von "$traight-$hoota
also ich würde ne cäsarverschlüsselung einfach so machen:
PHP-Code:
   1.
      $alpha 
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
   
2.
      $cipher 
substr($alpha$n26 $n) . substr($alpha0$n) . substr($alpha26+$n52-$n) . substr($alpha26$n);
   
3.
      
return strtr($str$alpha$cipher); 
Kannst du deinen Code bitte erklären? Ich versteh ihn nicht so ganz. Außerdem scheint es, dass die Verschiebung bei dir statisch ist. Eine funktionierende Variante mit statischer Verschiebung habe ich schon, das Problem liegt darin, dass ich ja eine Verschibung haben will, die hin- und her-pendelt. Beispiel: Verschiebungsmaximum 10. Dann wäre die Verschiebung 0 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 0 usw.
Ilinsekt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.11.2006, 18:40 Nach oben    #8
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 508
Standard

die verschiebung ist dynamisch (n).
zunächst wird das ganze alphabet in der variablen alpha gespeichert und dann um n-schritte verschoben. bei n=10 enthält chiper also qrstuvwxyzabcdefghijklmnopQRSTUVWXYZABCDEFGHIJKLMN OP

die funktion strtr ersetzt dann jedes zeichen des alphabets mit dem entsprechend verschobenen zeichen.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.11.2006, 07:49 Nach oben    #9
/(bb|[^b]{2})/
 
Registriert seit: 05.11.2006
Beiträge: 29
Standard

Versteh ich immer noch nicht. Die Funktion substr() gibt dir doch einen Teilstring zurück. Wenn du substr($alpha,$n,26-$n) machst, wird dir ein Teilstring zurückgeben, der bei der $n-ten Stelle anfängt und die Länge 26-$n hat.
Ilinsekt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.11.2006, 10:01 Nach oben    #10
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 395
Standard

ja, also hast du eine Verschiebung um $n Stellen nach rechts.
Bei $ = 5 hast du dann folgendes:
PHP-Code:
$alpha 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$cipher 'VWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU'
mit strstr() wird dann bei einem Codewort a mit V, b mit W, c mit X, usw. ersetzt.
Ganz einfach
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.11.2006, 10:03 Nach oben    #11
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 825
Standard

Hi.

Du machst hier keine Cöäsarverschiebung, sondern irgend was anderes. Cäsaverschiebung ist das, was du hier vorgeschlagen bekommst.

Wenn du aber bei deinem Verfahren bleiben möchtest (hab nicht geschaut, ob es überhaupt so ohne weiteres umkehrbar ist
Mir fällt beim Überfliegen grad nur auf, dass du in deinen for-Schleifen auf $Verschiebung <= $max prüfst und dabei $Verschiebieung jeweils eins hochsetzt. Folglich ist nach dem Durchlauf der ersten for-Schleife $Verschiebung = max+1 und nicht $max. Ich vermute mal, das sollte also $Verschiebung < $max heißen.

Weitere Fehlerquelle könnte magic_quotes.gpc sein.

Und, warum ziehst du 255 anstatt 256 ab? Weiter würde ich da mal ein wenig was auslagern. Du wiederhlst dich ja ständig.

Basti

Geändert von Basti (13.11.2006 um 10:12 Uhr).
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.11.2006, 17:50 Nach oben    #12
Dejan Spasic
 
Benutzerbild von dejan_spasic
 
Registriert seit: 05.01.2006
Ort: Düsseldorf
Beiträge: 169
Standard

Ich muss zugeben das ich nicht alle posts gelesen haben

Aber die Funktion besteht schon. In PHP zumindest. str_tor13.
Hier nähere Infos über ROT13
__________________
Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt)
dejan_spasic ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.11.2006, 07:43 Nach oben    #13
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.203
Standard

es ging hier aber nicht um eine statische rot13 Verschiebung. Die Verschiebung sollte sich reproduzierbar ändern; damit sie auch wieder zurückgeschoben werden kann - aber eben nicht um den festern Wert 13!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP 5.2 Kompilierung schlägt fehl Byrel Tools, Server, Betriebssysteme 0 03.11.2006 21:09
[Rezension] PHP 5 Kochbuch Artemis Literatur 2 07.09.2006 19:15
PHP 5.1.5, PHP 4.4.4 und PHP 5.2.0 RC2 veröffentlicht Ben Nachrichten 2 01.09.2006 16:05
PHP 5.1 ist drausen robo47 Nachrichten 5 28.11.2005 20:30
Neue PHP "release candidates": PHP 4.4.2 RC 1 und PHP 5.1 RC 6 Ben Nachrichten 1 21.11.2005 20:48


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:33 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44