|
| |
|
|
| |
для: t3ma
(13.05.2007 в 07:49)
| | | Тестовый пример приведите. Какие данные на вход поступают, какие на выходе образоваться должны. И алгоритм поподробнее, а то у Вас биты, байты, символы - всё в куче. Еще и значения десятичные откуда-то взялись. | |
| |
|
|
| |
|
|
| |
для: t3ma
(13.05.2007 в 07:49)
| | | никто непоможет ? | |
| |
|
|
| |
|
|
| | Здраствуйте уважаемые участники форума, вобщем в качаестве одной из лабораторных работ, мне было предложено написать алгоритм скремблерного шифрования, писать можно было в принципе на чем угодно, но поскольку последнее время я программировал исключительно на PHP, поэтому попытался сделать именно на нем, но в процессе написания столкнулся с несколькими проблемами, для начала код, того что у меня получилось:
<?
function scramblekey($text, $key,$scramb){
$lent=strlen($text);
$lens=strlen($scramb);
$lenk=strlen($key);
$ki=0;$pos_scr=0;
for ($m=0;$m<$lent;$m++){
echo $key[$lenk-1]^ $text[$m];
for($i=0;$i<$lens;$i++)
{
if($scramb[$ki]==1)
{
$res_scr[]=$key[$ki];
}
$ki++;
}
$new_bit=0;
$ki=0;
for($g=0;$g<count($res_scr);$g++)
{
$new_bit=$new_bit^$res_scr[$g];
}
$g=0;unset($res_scr);
$key=str_pad($key, $lenk+1, $new_bit, STR_PAD_LEFT);
$key=substr($key, 0, $lenk);
}
}
$PHP_SELF=$_SERVER['PHP_SELF'];
echo"
<style type='text/css'>
table.formtable
{border:2 px solid #0B75C4;
background: #C7D7E6;
border-collapse:collapse;
}
table.formtable td
{
border-width:1px;
border-color:#C7D7E6;
border-style:solid;
}
</style>
<table class='formtable' border=1 width='375'>
<form action=$PHP_SELF method='POST'>
<tr><td width=273>
<b>Укажите файл:
<td><input type='file' name='myfile' size='20'></tr>
<tr><td width=273>
<b>Ключ :
<td><input type='text' name='fkey' size='20' value='00000110'></tr>
<tr><td width=273>
<b>Скремблер :
<td><input type='text' name='scr' size='20' value='00000101'></tr>
<tr><td colspan='2'>
<p align='center'><br>
<input type='submit' value='Шифровать/Дешифровать' name='crypt'></p>
</p>
</form>
</table>
";
if(!empty($_POST['crypt'])){
$fkey=$_POST['fkey'];$scr=$_POST['scr'];
$len_key=strlen($fkey); $len_scr=strlen($scr);
if($len_key!=$len_scr){echo "ВНИМАНИЕ, Длина <b>ключа</b> должна совпадать с длиной <b>скремблера</b><br><br>";}}
if (!empty($_POST['myfile']))
{$file = fopen($_POST['myfile'],"rb");
if(!$file){echo("Ошибка открытия файла");}
else{
scramblekey(fread($file,filesize($_POST['myfile'])),$fkey,$_POST['scr']);
fclose($file);
}
}
|
Но данный алгоритм как видно из строчки
echo $key[$lenk-1]^ $text[$m];
|
производит логическую операцию XOR не со каждым из битов кодируемого символа, а со всем байтом (символом), то есть если преобразовать данный символ в ASCII код, а затем десятичное число ASCII кода в бинарный формат, ксорятся не все биты, а лишь последний...
может кто нибудь подскажет, как переписать данный алгоритм что бы ксорились именно все биты кодируемого символа.. я пытался сделать, мысль была правильной..но уже запутался ))
заранее спасибо
(c) Al3x | |
| |
|
|
|