User Tools

Site Tools


deprecated:php:encodingmap

[PHP] Encoding Map

<?php 
//Test
$flag = false;
echo "<b>Input:</b><br />\n";
echo $text = "Hallo Welt,<br />\nhallo zum 2'ten";
echo "<hr />\n";
echo "<b>Verschlüsselt:</b><br />\n";
echo $encryptedText = Map::encrypt($text, $flag);
echo "<hr />\n";
echo "<b>Entschlüsselt:</b><br />\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<String> $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));
	}
}
 
 
?>
deprecated/php/encodingmap.txt · Last modified: 11.12.2013 10:52:20 (external edit)