Playfair: Quellcode


Dies ist der gewünschte Quellcode zum Ver-/Entschlüsseln der Playfair-Chiffre in PHP. Er liegt direkt als Funktion vor, ist also sofort einsetzbar. Der Code ist öffentlich zugänglich, da ich der Meinung bin, dass Quellcode immer OpenSource sein sollte. Dennoch hat mich der Code viel Mühe gekostet. Ich würde mich also freuen, wenn man sich an die Lizenz hielte.

  Zurück zum Tool    Erklärung der ‘Playfair-Chiffre’

PHP-Code:1

Folgender Code unterliegt dieser Lizenz:

Creative Commons Lizenzvertrag

Playfair-Chiffre with PHP von Till Sanders steht unter einer Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported Lizenz.
Beruht auf einem Inhalt unter www.compufreak.info.
Über diese Lizenz hinausgehende Erlaubnisse können Sie unter http://www.compufreak.info/kontakt/ erhalten.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
function str_playfair($text,$key,$dir="en"){
//$text: Text
//$key: Key
//$dir: Encrypt = en, Decrypt = de, Default = en
// Copyright (c) 2010 by Till Sanders
// Updates and Support: http://www.compufreak.info/
// License: Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
 
$key=strtolower($key);
$text=strtolower($text);
$text=$dir=="en"?str_replace("J","i",str_replace("j","i",$text)):$text;
$count=0;
$endergebnis="";
$prekey=array();
$alphabet=array_merge(range('a','i'),range('k','z'));
for($count=0;$count<25;$count++){
     if($count>=strlen($key)){
          $prekey[]=array_shift($alphabet);
     } else {
          $prekey[]=$key[$count];
          $pos=array_keys($alphabet,$key[$count]);
          unset($alphabet[$pos[0]]);
     }
}
$finalkey=array(0 => array_slice($prekey,0,5),1 => array_slice($prekey,5,5),2 => array_slice($prekey,10,5),3 => array_slice($prekey,15,5),4 => array_slice($prekey,20,5));
if($dir=="en"){
     for($count=0;$count<strlen($text)-strlen($text)%2;$count++){
          if(strtolower($text[$count])==strtolower($text[$count+1])){
          $text=substr($text,0,$count+1)."x".substr($text,$count+1);
          }
     }
     $text.=strlen($text)%2==1?"x":"";
}
$dir=$dir=="en"?1:4;
for($count=0;$count<strlen($text);$count++){
          for($count2=0;$count2<5;$count2++){
               $col=array_keys($finalkey[$count2],$text[$count]);
               if($col)
               $first=array($count2,$col[0]);
          }
          for($count2=0;$count2<5;$count2++){
               $col=array_keys($finalkey[$count2],$text[$count+1]);
               if($col)
               $second=array($count2,$col[0]);
          }
          if($first[0]==$second[0]){
               $newpos=($first[1]+$dir)%5;
               $endergebnis.=$finalkey[$first[0]][$newpos];
               $newpos=($second[1]+$dir)%5;
               $endergebnis.=$finalkey[$second[0]][$newpos];
          } else if($first[1]==$second[1]){
               $newpos=($first[0]+$dir)%5;
               $endergebnis.=$finalkey[$newpos][$first[1]];
               $newpos=($second[0]+$dir)%5;
               $endergebnis.=$finalkey[$newpos][$second[1]];
          } else {
               $endergebnis.=$finalkey[$first[0]][$second[1]];
               $endergebnis.=$finalkey[$second[0]][$first[1]];
          }
          $count++;
}
return($endergebnis);
}

function playfair_square($key,$output="array",$table_class=false){
//$key: Key
//$output: Key as array = array, Key as HTML-table = table, Default = array
//$table_class: Defines a class for the table
// Copyright (c) 2010 by Till Sanders
// Updates and Support: http://www.compufreak.info/
// License: Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
$count=0;
$key=strtolower($key);
$prekey=array();
$alphabet=array_merge(range('a','i'),range('k','z'));
for($count=0;$count<25;$count++){
     if($count>=strlen($key)){
          $prekey[]=array_shift($alphabet);
     } else {
          $prekey[]=$key[$count];
          $pos=array_keys($alphabet,$key[$count]);
          unset($alphabet[$pos[0]]);
     }
}
$finalkey=array(0 => array_slice($prekey,0,5),1 => array_slice($prekey,5,5),2 => array_slice($prekey,10,5),3 => array_slice($prekey,15,5),4 => array_slice($prekey,20,5));
if($output=="array"){
return($finalkey);
} else {
$return="<table".($table_class!=false?" class=\"".$table_class."\"":"").">\n<tr><td>".$finalkey[0][0]."</td><td>".$finalkey[0][1]."</td><td>".$finalkey[0][2]."</td><td>".$finalkey[0][3]."</td><td>".$finalkey[0][4]."</td></tr>\n<tr><td>".$finalkey[1][0]."</td><td>".$finalkey[1][1]."</td><td>".$finalkey[1][2]."</td><td>".$finalkey[1][3]."</td><td>".$finalkey[1][4]."</td></tr>\n<tr><td>".$finalkey[2][0]."</td><td>".$finalkey[2][1]."</td><td>".$finalkey[2][2]."</td><td>".$finalkey[2][3]."</td><td>".$finalkey[2][4]."</td></tr>\n<tr><td>".$finalkey[3][0]."</td><td>".$finalkey[3][1]."</td><td>".$finalkey[3][2]."</td><td>".$finalkey[3][3]."</td><td>".$finalkey[3][4]."</td></tr>\n<tr><td>".$finalkey[4][0]."</td><td>".$finalkey[4][1]."</td><td>".$finalkey[4][2]."</td><td>".$finalkey[4][3]."</td><td>".$finalkey[4][4]."</td></tr>\n</table>";
return($return);
}
}
?>
  1. Diese PHP-Implementierung hat mich mehrere Tage gekostet. Da ist viel Arbeit reingeflossen und ich finde, dass jeder den Anstand haben sollte, meine Arbeit zu würdigen, sollte er sie weiter verwenden. Ein kleiner Hinweis auf meine Website an irgendeiner Stelle würde mir weiterhelfen und mich ermutigen, meine Arbeiten fortzusetzen :-) – Keep fair!

Facebook Twitter RSS MyNameIsE YouTube