Gefällt dir ein Beitrag, dann verbreite ihn doch als Link über Twitter, damit ihn auch Andere lesen können!

Erklärung der ‘Playfair-Chiffre’



Aus Schlüsselwort generiertes Playfair-Quadrat:

a b c d e
f g h i k
l m n o p
q r s t u
v w x y z

PHP-Code:2

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 Playfair-Implementierung unterstützt leider keine Zeilenumbrüche oder Sonderzeichen (Umlaute, Punkt, Komma, etc.) Diese werden gefiltert.
  2. 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!
VN:F [1.9.3_1094]
Rating: 0.0/5 (0 votes cast)