я тут накропал "матрикс хелпер". Только для матриц 32х32

можете самостоятельно мог поиздеваться над текстом 7го шага
там всередине уже есть кодА, но никто не запрещает вставлять свои, менять функцию расшифровки внутре (для удобства она сделана в виде таблицы

)
В общем - поломайте головы окончательно!
текст файла matrix.html :
Код:
<html>
<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>matrix solver</title>
</head>
<script language="javascript"><!--
function translate(sNum)
{
// таблица кодировки. меняйте как вам заблагорассудится :-)
switch (sNum){
case "01" : return 'в';
case "02" : return 'г';
case "03" : return 'д';
case "04" : return 'е';
case "05" : return 'ё';
case "06" : return 'ж';
case "07" : return 'з';
case "08" : return 'и';
case "09" : return 'й';
case "10" : return 'к';
case "11" : return 'л';
case "12" : return 'м';
case "13" : return 'н';
case "14" : return 'о';
case "15" : return 'п';
case "16" : return 'р';
case "17" : return 'с';
case "18" : return 'т';
case "19" : return 'у';
case "20" : return 'ф';
case "21" : return 'х';
case "22" : return 'ц';
case "23" : return 'ч';
case "24" : return 'ш';
case "25" : return 'щ';
case "26" : return 'ъ';
case "27" : return 'ы';
case "28" : return 'ь';
case "29" : return 'э';
case "30" : return 'ю';
case "31" : return 'я';
case "32" : return 'А';
case "33" : return 'Б';
case "34" : return 'В';
case "35" : return 'Г';
case "36" : return 'Д';
case "37" : return 'Е';
case "38" : return 'Ё';
case "39" : return 'Ж';
case "40" : return 'З';
case "41" : return 'И';
case "42" : return 'Й';
case "43" : return 'К';
case "44" : return 'Л';
case "45" : return 'М';
case "46" : return 'Н';
case "47" : return 'О';
case "48" : return 'П';
case "49" : return 'Р';
case "50" : return 'С';
case "51" : return 'Т';
case "52" : return 'У';
case "53" : return 'Ф';
case "54" : return 'Х';
case "55" : return 'Ц';
case "56" : return 'Ч';
case "57" : return 'Ш';
case "58" : return 'Щ';
case "59" : return 'Ъ';
case "60" : return 'Ы';
case "61" : return 'Ь';
case "62" : return 'Э';
case "63" : return 'Ю';
case "64" : return 'Я';
case "65" : return 'а';
case "66" : return 'б';
default: return ' ';
}
}
function decrypt(sIdSrc, sIdDst)
{
var lsRows = document.getElementById(sIdSrc).value.split ("\n");
var sSum = "";
for (i = 0; i < lsRows.length ; i++)
{
var lsCols = lsRows[i].slice(0,95).split(" ");
var s = "";
for (j = 0; j < lsCols.length; j++)
{
s = s + translate (lsCols[j]);
}
if (i == 0){sSum = s;}else{sSum = sSum +"\n"+ s;}
}
document.getElementById(sIdDst).value = sSum;
}
function reflectV(sSrcId,sDstId)
{
var ls = document.getElementById(sSrcId).value.split("\n");
var sSum = ls[31];
for (i = 30; i >= 0; i--)
{
ls[i] = ls[i].slice(0,32);
sSum = sSum + "\n" + ls[i];
}
document.getElementById(sDstId).value = sSum;
}
function reflectH(sSrcId,sDstId)
{
var ls = document.getElementById(sSrcId).value.split("\n");
var sSum = "";
for (i = 0; i < ls.length; i++)
{
s = "";
ls[i] = ls[i].slice(0,32);
for (j = 0; j < ls[i].length; j++)
{
s = ls[i].charAt(j) + s;
}
if (i == 0){sSum = s;}else{sSum = sSum +"\n"+ s;}
}
document.getElementById(sDstId).value = sSum;
}
function rotate90(sSrcId,sDstId)
{
var ls = document.getElementById(sSrcId).value.split("\n");
var sSum = "";
for (i = 0; i < 32; i++)
{
var s = "";
for (j = 0; j < 32; j++)
{
s = s + ls[31-j].charAt(i);
}
if (i == 0){sSum = s;}else{sSum = sSum +"\n"+ s;}
}
document.getElementById(sDstId).value = sSum;
}
function rotate45b(sSrcId, sDstId)
{
var ls = document.getElementById(sSrcId).value.split("\n");
var sSum = "";
for (i = 0; i < 32; i++)
{
var s = "";
for (j = i; j >= 0; j--)
{
s = s + ls[j].charAt(i-j);
}
if (i == 0){sSum = s;}else{sSum = sSum +"\n"+ s;}
}
for (i = 1; i < 32; i++)
{
var s = "";
for (j = i; j < 32; j++)
{
s = s + ls[31-j+i].charAt(j);
}
sSum = sSum +"\n"+ s;
}
document.getElementById(sDstId).value = sSum;
}
function rotate45a(sSrcId, sDstId)
{
var ls = document.getElementById(sSrcId).value.split("\n");
var sSum = "";
for (i = 0; i < 32; i++)
{
var s = "";
for (j = i; j >= 0; j--)
{
s = s + ls[i-j].charAt(j);
}
if (i == 0){sSum = s;}else{sSum = sSum +"\n"+ s;}
}
for (i = 1; i < 32; i++)
{
var s = "";
for (j = i; j < 32; j++)
{
s = s + ls[j].charAt(31-j+i);
}
sSum = sSum +"\n"+ s;
}
document.getElementById(sDstId).value = sSum;
}
function rotations(sId1,sId2,sId3,sId4,sId5, sId6a,sId7a,sId8a,sId9a, sId6b,sId7b,sId8b,sId9b)
{
rotate90(sId1,sId3);
rotate90(sId3,sId4);
rotate90(sId4,sId5);
rotate90(sId5,sId2);
rotate45a(sId2,sId6a);
rotate45a(sId3,sId7a);
rotate45a(sId4,sId8a);
rotate45a(sId5,sId9a);
rotate45b(sId2,sId6b);
rotate45b(sId3,sId7b);
rotate45b(sId4,sId8b);
rotate45b(sId5,sId9b);
}
-->
</script>
<body>
<form>
<input type="button" value="перевод из чисел в текст" onclick="decrypt('num_text','char_text')" >
<br />
<table border="1"><tr><td>матрица</td><td>буквы из матрицы<br />(а можете просто так ввести текст 32х32)</td><td>операции</td></tr><tr><td>
<textarea id="num_text" cols="96" rows="32" style="font-family:Courier; font-size:10">
13 52 08 09 14 50 14 18 65 12 16 14 03 08 11 17 31 48 13 19 13 14 08 36 19 09 44 65 04 18 46 65
41 17 11 48 14 30 19 36 04 11 14 65 10 16 08 07 16 14 11 04 22 13 08 65 14 65 08 13 13 08 04 16
18 21 17 27 15 02 65 03 04 65 15 40 66 12 22 04 04 04 08 04 04 26 08 13 04 66 18 65 18 08 08 18
08 12 27 18 66 16 14 65 26 13 17 14 65 14 14 08 03 12 13 08 39 65 13 48 65 36 16 31 02 08 18 14
46 19 12 14 14 10 14 13 14 66 13 13 10 10 18 16 14 14 11 65 19 04 65 04 14 04 12 65 14 65 17 51
31 16 14 17 18 08 14 01 04 16 65 14 13 11 08 65 35 16 04 31 16 36 16 30 18 06 13 10 01 04 65 19
08 08 08 15 16 16 06 30 04 16 16 14 08 31 14 15 16 04 03 66 65 14 14 04 03 65 03 14 16 01 11 16
13 11 18 14 14 65 17 08 19 16 51 16 14 08 11 13 65 04 16 65 11 10 34 14 16 65 13 04 16 24 34 65
04 17 17 51 15 66 13 18 04 16 08 15 11 13 23 24 08 04 66 14 19 13 48 16 11 50 18 14 13 04 12 08
06 31 14 08 14 27 04 04 14 08 23 18 47 31 04 04 11 18 18 16 31 30 17 17 65 02 20 08 07 13 16 11
08 28 18 12 18 01 11 03 20 09 04 11 26 08 11 15 16 27 26 18 65 12 27 40 14 02 08 04 18 30 65 08
18 14 31 31 08 65 14 08 26 22 10 18 13 17 13 19 16 18 13 17 01 12 27 11 09 11 66 17 16 18 10 31
17 14 01 18 06 30 03 18 16 11 17 14 65 14 13 65 47 04 65 27 31 14 22 08 16 14 04 19 15 14 04 65
14 17 01 08 31 30 17 04 14 14 14 13 17 24 01 18 09 16 12 12 08 65 16 04 17 04 13 14 03 11 09 14
03 04 17 13 08 14 51 14 13 13 65 33 14 18 04 27 16 10 41 04 21 65 65 08 13 15 16 25 13 04 66 65
35 19 12 65 13 13 14 16 04 01 04 18 16 65 26 17 11 04 03 65 13 65 18 01 18 13 04 01 16 65 18 26
11 19 47 18 04 08 04 10 65 01 65 16 18 18 65 17 11 17 16 16 04 13 17 13 03 04 14 24 11 17 13 13
08 46 17 13 11 01 27 17 14 10 14 27 16 16 14 65 04 18 14 11 12 11 14 13 08 01 12 17 08 04 26 04
18 04 17 18 15 65 18 14 10 14 15 09 14 08 19 16 17 34 03 14 65 16 13 31 08 04 14 16 18 18 04 23
23 27 18 21 65 44 14 18 14 17 14 12 13 19 06 03 14 30 01 14 18 17 03 18 13 47 13 09 65 03 18 65
10 16 41 10 16 31 18 65 08 31 52 27 17 04 08 08 13 18 57 17 19 65 04 65 65 16 13 15 13 23 51 16
08 16 18 27 10 04 03 03 26 08 03 04 17 24 08 65 17 14 19 31 25 25 03 36 18 52 04 08 08 04 13 12
13 08 13 65 01 08 19 18 27 16 66 19 13 12 10 13 65 18 09 45 41 16 08 11 65 11 11 24 37 57 08 14
13 10 10 65 16 65 17 18 14 04 02 65 16 08 65 18 04 04 27 01 14 16 18 65 57 65 18 11 08 25 11 18
04 04 46 01 66 14 14 02 13 01 01 65 16 16 08 12 31 24 08 17 65 06 48 31 19 65 04 08 30 11 04 04
25 08 65 26 13 13 13 04 65 04 65 10 18 16 14 17 18 27 13 18 18 27 04 27 06 47 13 65 14 03 65 46
31 18 03 17 17 04 18 66 16 13 08 17 12 13 18 03 55 04 04 14 22 62 08 12 65 04 13 18 16 65 01 65
01 19 65 04 24 14 16 27 36 13 14 65 08 19 14 31 08 50 51 09 14 16 04 13 51 08 11 08 65 18 08 66
50 15 51 65 15 65 16 08 18 16 14 45 17 51 27 44 26 13 14 04 48 16 08 14 12 14 40 14 66 06 07 04
14 65 16 04 32 15 10 08 15 11 08 04 19 34 07 03 27 66 08 18 21 08 18 50 11 65 66 27 09 27 04 11
19 43 65 16 66 19 13 10 19 11 13 16 14 10 18 14 47 46 65 08 65 16 08 19 65 14 01 14 11 50 11 12
19 65 50 18 16 04 12 31 18 17 31 65 10 11 65 48 16 65 01 65 11 45 08 03 08 46 65 03 30 44 08 14</textarea>
</td><td>
<textarea id="char_text" cols="33" rows="32" style="font-family:Courier; font-size:10"></textarea>
</td><td>
над базовым текcтом:<br />
<input type="button" value="отразить по вертикали" onclick="reflectV('char_text','char_text')" />
<input type="button" value="отразить по горизонтали" onclick="reflectH('char_text','char_text')" />
на основе базового текста:<br />
<input type="button" value="повoроты" onclick="rotations('char_text','char_text0','char_text90','char_text180','char_text270','char_text45a','char_text135a','char_text225a','char_text315a','char_text45b','char_text135b','char_text225b','char_text315b')" />
</td></tr></table>
<table><tr><td>0</td><td>90</td><td>180</td><td>270</td></tr><tr><td>
<textarea id="char_text0" cols="33" rows="32" style="font-family:Courier; font-size:10" readonly></textarea>
</td><td>
<textarea id="char_text90" cols="33" rows="32" style="font-family:Courier; font-size:10" readonly></textarea>
</td><td>
<textarea id="char_text180" cols="33" rows="32" style="font-family:Courier; font-size:10" readonly></textarea>
</td><td>
<textarea id="char_text270" cols="33" rows="32" style="font-family:Courier; font-size:10" readonly></textarea>
</td></tr><tr><td>45 сверху-вниз</td><td>135 сверху-вниз</td><td>225 сверху-вниз</td><td>315 сверху-вниз</td></tr><tr><td>
<textarea id="char_text45a" cols="33" rows="64" style="font-family:Courier; font-size:10" readonly></textarea>
</td><td>
<textarea id="char_text135a" cols="33" rows="64" style="font-family:Courier; font-size:10" readonly></textarea>
</td><td>
<textarea id="char_text225a" cols="33" rows="64" style="font-family:Courier; font-size:10" readonly></textarea>
</td><td>
<textarea id="char_text315a" cols="33" rows="64" style="font-family:Courier; font-size:10" readonly></textarea>
</td></tr><tr><td>45 снизу-вверх</td><td>135 снизу-вверх</td><td>225 снизу-вверх</td><td>315 снизу-вверх</td></tr><tr><td>
<textarea id="char_text45b" cols="33" rows="64" style="font-family:Courier; font-size:10" readonly></textarea>
</td><td>
<textarea id="char_text135b" cols="33" rows="64" style="font-family:Courier; font-size:10" readonly></textarea>
</td><td>
<textarea id="char_text225b" cols="33" rows="64" style="font-family:Courier; font-size:10" readonly></textarea>
</td><td>
<textarea id="char_text315b" cols="33" rows="64" style="font-family:Courier; font-size:10" readonly></textarea>
</td></tr></table>
</form>
</body>
</html>