======[PHP] Encoding Map====== {{section>snippets#:deprecated&noheader&firstseconly}} Input:
\n"; echo $text = "Hallo Welt,
\nhallo zum 2'ten"; echo "
\n"; echo "Verschlüsselt:
\n"; echo $encryptedText = Map::encrypt($text, $flag); echo "
\n"; echo "Entschlüsselt:
\n"; echo Map::decrypt($encryptedText, $flag); class Map{ const C_FLAG_DEFAULT = false; //Pseudo-Hexwerte immer Gross //Die Werte sollten über '7F' liegen, damit keine Probleme auftauchen //Die Extendes ASCII-Codes werden so zwar überschrieben, aber diebraucht man eh fast nie. Ansonsten //sollte der Wert halt über 'FF' liegen. Hier sind auch Werte wie 'GF' etc. zulässig protected static $map = array('h' =>'F1', 'H' => 'A1', 'd' => '9F', 'e' => 'EF'); protected static $switcher = C_FLAG_DEFAULT; protected static $cruptFunc = ''; /** * verschlüsselt einen Text * @static * @param String $text zu verschlüsselnder Text * @param Boolean $flag Flag, true oder afalse der mitgegeben werden kann. * Dieser beinflusst den Switcher. Zum verschlüssen und entschlüsseln muss * der gleiche Wert verwendet werden! * Default ist false * @return String Verschlüsselter Text */ public static function encrypt($text, $flag = self::C_FLAG_DEFAULT){ return self::convert(str_split($text), $flag, 'encryptLetter'); } /** * entschlüsselt einen Text * @static * @param String $string Verschlüsselter Text * @param Boolean $flag Flag analog zum Parameter $flag von encrypt */ public static function decrypt($string, $flag = self::C_FLAG_DEFAULT){ return self::convert(str_split($string, 2), $flag, 'decryptLetter'); } /** * setzt die Initial-Parameter und ruft über alle Elemente die Ver/Entschlüsselung auf * @static * @param Array $array * @param Boolean $flag * @param String $func * @return String */ protected static function convert($array, $flag, $func){ self::$switcher=$flag; self::$cruptFunc = $func; //Alle Elemente des Arrays zusammenführen return array_reduce($array, array(self, 'reduce')); } /** * Funktion zum ver-/entschlüsseln und zusammenfügen aller Buchstaben * Diese Callback-Funktion wird für array_reduce() verwendet * @static * @param String $a 1. Buchstabe * @param String $b 2. Buchstabe * @return String zusammengehängte Buchstaben */ protected static function reduce($a, $b){ return $a. call_user_func(array(self, self::$cruptFunc), $b, self::$switcher = !self::$switcher); } /** * Verschlüsseln eines Buchstabens * @static * @param String $letter Entschlüsselter Buchstabe * @param Boolean $reverse * @return String Verschlüsselter Buchstabe */ protected static function encryptLetter($letter, $reverse=false){ //prüfen ob der Buchstabe im map-array ist. Wenn ja, diesen Wert nehmen. Ansonsten den Hex-Wert $hex = array_key_exists($letter, self::$map) ? self::$map[$letter] : strtoupper(dechex(ord($letter))); //Sicherstellen dass der String 2 Zeichen lang ist. 'A' -> '0A' $hex = str_pad($hex, 2, '0', STR_PAD_LEFT); //Hex-Wert umkehren return $reverse ? strrev($hex) : $hex; } /** * entschlüsseln eines Buchstabens * @static * @param String $hex Verschlüsselter Buchstabe * @param Boolean $reverse * @return String Entschlüsselter Buchstabe */ protected function decryptLetter($hex, $reverse = false){ //Hex-Wert umkehren $hex = strtoupper($reverse ? strrev($hex) : $hex); //Im map-array suchen und ggf passenden Wert zurückgeben. Ansonsten den Hexwert zurückwandeln return ($letter = array_search($hex, self::$map)) ? $letter : chr(hexdec($hex)); } } ?>
{{tag>deprecated:PHP}}