Методичка такая.
Большое число раскладывается по формуле (16+4)^3
000 16^3
001 16^2*4
010 16^2*4
011 16^2*4
100 16*4^2
101 16*4^2
110 16*4^2
111 2^3
потом обратная операция в исходное число.
index.php
<?php
session_start();
require_once('base_convert_y.php');
require_once('downarh.php');
require_once('uparh.php');
if ( isset ( $_POST['submit'] ) ) {
$numberInput = $_POST['numberInput'];
echo "<br>".$numberInput." сообщение<br>";
$downarh_0002 = downarh_0002 ($numberInput);
echo "<br>".$downarh_0002." Зашифрованое сообщение Функция downarh_0002<br>";
echo "<br>-----------------------------------------------------------<br>";
$numberOut = uparh_1113 ($downarh_0002);
echo "<br>".$numberOut." сообщение востановленое Функция OpenArh_2002<br>";
echo '<br /><br /><a href="index.php" title="Вернутся.">Вернутся..</a><br />';
exit;
}
echo '<form method="POST">
<b>Введите число для шифрования. в 10 системе исчисления.</b><br />
<input type="text" name="numberInput" value="01234567890123456789" size="100" /><br />';
echo '<input type="SUBMIT" value="Зашифровать" name="submit" /></form>';
?>
base_convert_y.php
<?php
function base_convert_y($str, $frombase=10, $tobase=36) {
$str = trim($str);
if (intval($frombase) != 10) {
$len = strlen($str);
$q = 0;
for ($i=0; $i<$len; $i++) {
$r = base_convert($str[$i], $frombase, 10);
$q = bcadd(bcmul($q, $frombase), $r);
}
}
else $q = $str;
if (intval($tobase) != 10) {
$s = '';
while (bccomp($q, '0', 0) > 0) {
$r = intval(bcmod($q, $tobase));
$s = base_convert($r, 10, $tobase) . $s;
$q = bcdiv($q, $tobase, 0);
}
}
else $s = $q;
return $s;
}
?>
downarh.php
<?php
session_start();
require_once('base_convert_y.php');
function downarh_0002($str) {
$chislo = $str;
$chislo = base_convert_y($chislo, 20, 10);
echo $chislo." <br>";
preg_match_all('!\S{3}!', $chislo, $result);
for ($i=0; $i< count($result[0]); $i++) {
$rez = "";
$per = $result[0][$i];
preg_match_all('!\S{1}!', $per, $znach);
for ($ii=0; $ii< count($znach[0]); $ii++) {
if ($ii == 0) $x = $znach[0][$ii];
if ($ii == 1) $y = $znach[0][$ii];
if ($ii == 2) $z = $znach[0][$ii];
}
$x = base_convert_y($x, 20, 10);
$y = base_convert_y($y, 20, 10);
$z = base_convert_y($z, 20, 10);
if ($x > 3 & $y > 3 & $z > 3) {
$x = $x - 4;
$x = base_convert_y($x, 10, 2);
$y = $y - 4;
$y = base_convert_y($y, 10, 2);
$z = $z - 4;
$z = base_convert_y($z, 10, 2);
if ($x < 1000) $x = "0".$x;
if ($x < 100) $x = "0".$x;
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 1000) $y = "0".$y;
if ($y < 100) $y = "0".$y;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 1000) $z = "0".$z;
if ($z < 100) $z = "0".$z;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "111".$xyz;
}elseif ($x < 4 & $y < 4 & $z < 4) {
$x = base_convert_y($x, 4, 2);
$y = base_convert_y($y, 4, 2);
$z = base_convert_y($z, 4, 2);
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "000".$xyz;
}
if ($x > 3 & $y < 4 & $z > 3) {
$x = $x - 4;
$x = base_convert_y($x, 10, 2);
$y = base_convert_y($y, 4, 2);
$z = $z - 4;
$z = base_convert_y($z, 10, 2);
if ($x < 1000) $x = "0".$x;
if ($x < 100) $x = "0".$x;
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 1000) $x = "0".$x;
if ($z < 100) $x = "0".$x;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "101".$xyz;
}elseif ($x < 4 & $y > 3 & $z < 4) {
$x = base_convert_y($x, 4, 2);
$y = $y - 4;
$y = base_convert_y($y, 10, 2);
$z = base_convert_y($z, 4, 2);
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 1000) $y = "0".$y;
if ($y < 100) $y = "0".$y;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "010".$xyz;
}
if ($x < 4 & $y > 3 & $z > 3) {
$x = base_convert_y($x, 4, 2);
$y = $y - 4;
$y = base_convert_y($y, 10, 2);
$z = $z - 4;
$z = base_convert_y($z, 10, 2);
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 1000) $y = "0".$y;
if ($y < 100) $y = "0".$y;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 1000) $z = "0".$z;
if ($z < 100) $z = "0".$z;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "011".$xyz;
}elseif ($x > 3 & $y < 4 & $z < 4) {
$x = $x - 4;
$x = base_convert_y($x, 10, 2);
$y = base_convert_y($y, 4, 2);
$z = base_convert_y($z, 4, 2);
if ($x < 1000) $x = "0".$x;
if ($x < 100) $x = "0".$x;
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "100".$xyz;
}
if ($x > 3 & $y > 3 & $z < 4) {
$x = $x - 4;
$x = base_convert_y($x, 10, 2);
$y = $y - 4;
$y = base_convert_y($y, 10, 2);
$z = base_convert_y($z, 4, 2);
if ($x < 1000) $x = "0".$x;
if ($x < 100) $x = "0".$x;
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 1000) $y = "0".$y;
if ($y < 100) $y = "0".$y;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "110".$xyz;
}elseif ($x < 4 & $y < 4 & $z > 3) {
$x = base_convert_y($x, 4, 2);
$y = base_convert_y($y, 4, 2);
$z = $z - 4;
$z = base_convert_y($z, 10, 2);
if ($x < 10) $x = "0".$x;
if ($x < 1) $x = "0".$x;
if ($y < 10) $y = "0".$y;
if ($y < 1) $y = "0".$y;
if ($z < 1000) $z = "0".$z;
if ($z < 100) $z = "0".$z;
if ($z < 10) $z = "0".$z;
if ($z < 1) $z = "0".$z;
$xyz = $x.$y.$z;
$rez.= "001".$xyz;
}
$final.= $rez."";
}
echo $final." <br>";
$final = base_convert_y($final, 2, 20);
echo $final." <br>";
$final = base_convert_y($final, 20, 10);
return $final;
}
?>