Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
<?php
$string = "hallo!";
$map = array(
'a' => 1,
'h' => 2,
'l' => 3,
'o' => 4
// ...
);
$length = strlen( $string );
$encoded = "";
for ( $i = 0; $i < $length; ++$i ) {
$encoded .= isset( $map[ $string{ $i } ] )
? $map[ $string{ $i } ]
: "0";
}
var_dump( $encoded );
<?php
$string = "Hallo!";
$map = array(
'a' => "-01",
'h' => "-02",
'l' => "-03",
'o' => "-04",
'H' => "+02",
// ...
);
$length = strlen( $string );
$encoded = "";
for ( $i = 0; $i < $length; ++$i ) {
$encoded .= isset( $map[ $string{ $i } ] )
? $map[ $string{ $i } ]
: "000";
}
var_dump( $encoded );
<?php
$map = array(
'a' => "-01",
'h' => "-02",
'l' => "-03",
'o' => "-04",
'H' => "+02",
// ...
);
<?php
//Test
$flag = true;
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));
}
}
?>
Flag = true: A1166CC66F0257FE6C472CC3622720F23EA0F1166CC66F027A576D02327274FE6E
Flag = false: 1A61C66CF62075EFC674C23C2672022FE30A1F61C66CF620A775D620232747EFE6