[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Некорректная обработка данных
galin
Пожалуйста, помогите девушке!
Установлено оборудование
Денвер 3
Php 5

Написана и работает без ошибок программа шифрования ЭЦП на основе алгоритма RSA c использованием стандартной функции bcpowmod- быстрое возведение в степень по модулю.
Но требуется , чтобы была использована нестандартная функция по возведению в степень по модулю, при использовании которой зашифрование хэш-кода и расшифрование эцп происходит с ошибками.

Моя нестандартная функция выглядит так

[code/]
function fast_pow($x,$y,$mod) {
$ostat = 1;
while ($y>0) {
if ($y & 1==1)
$ostat =($ostat * $x)% $mod;
//$ostat =($ostat * $x)- $mod*floor(($ostat * $x)/$mod);
$y =$y >> 1;
$x = ($x * $x)%$mod;
//$x = ($x * $x)- $mod*floor(($x*$x)/$mod);
}
return $ostat;
}

//---------------------------------------------------------------------------------
elseif (isset($_POST['crypt']) and ($_POST['e'] != "") and ($_POST['n'] != "")and ($_POST['d'] != "") ) {
echo "<h3>Шифрование </h2><br>";
if (is_uploaded_file($_FILES["file"]["tmp_name"])) {
$fpin = fopen($_FILES["file"]["tmp_name"],"rb"); // выбрать хэш.txt
$fpout = fopen("эцп.txt", "wb+");
echo "<br>хэш код = ";
while (!feof($fpin)) {
if (($ch =fread($fpin,1))==null)
break;
else
fseek ($fpin, -1,SEEK_CUR);

$c = fread($fpin,1);
echo $c;
$ch = fast_pow(ord($c),$e,$n);
// $ch = bcpowmod(ord($c),$e,$n); //получение эцп- шифрование
$sss = pack("I",$ch);
fwrite($fpout,$sss,4);
}
rewind($fpout); //вывод эцп на экран
$content = fread($fpout, filesize("эцп.txt"));
echo "<br> ЭЦП= ".$content;
echo"<br>=";

fclose($fpout);
fclose($fpin);
}
}
elseif (isset($_POST['crypt']))
echo "<h3>Шифрование</h2><br>Не введены необходимые данные<br>";
//-----------------------------------------------------------------------------------------------
elseif (isset($_POST['decrypt']) and ($_POST['d'] != "") and ($_POST['n'] != "")and ($_POST['e'] != "") ) {
echo "<h3>Расшифрование</h2><br>";
if (is_uploaded_file($_FILES["file"]["tmp_name"])) { // выбрать эцп.txt
$fpin = fopen($_FILES["file"]["tmp_name"],"rb");
$fpout = fopen("decrypted.txt", "wb+");
$fp = fopen("хэш.txt", "rb");
$content = fread($fp, filesize("хэш.txt"));
echo "<br>хэш до зашифрования = ".$content;

echo "<br>хэш после расшифрования = ";
while (false != ($val = fread($fpin,4))) {
$val1 =implode(unpack("I",$val));
$v =fast_pow(intval($val1),$d,$n);
// $v = bcpowmod(intval($val1),$d,$n);
echo chr($v);
$val='';
fwrite($fpout,chr($v));
}
fclose($fpin);
fclose($fpout);
fclose($fp);
}
}
elseif (isset($_POST['decrypt']))
echo "<h3>Дешифрование</h2><br>Не введены необходимые данные<br>";

[code/]




Результаты работы программы

хэш-код для зашифрования

67c3e241c8eee6802f489375b3384c2

!) При использовании стандартной программы bcpowmod получается

Эцп в блокноте
*h ј“c °Вб RЯF „‹* жђ% Dgњ c?w°Вб 1‹5 „‹* „‹* „‹*
*h 1‹5 ”џ-$жђ% К?• Dgњ 1‹5 Ї‡Н RЯF ј“c  , ‹ RЯF RЯF 1‹5 Dgњ °Вб жђ%

и
ЭЦП после расшифрования 67c3e241c8eee6802f489375b3384c2
2) При использовании function fast_pow($x,$y,$mod)
получается

Эцп
+HЂ b}! i† R§ sъ R • 2 А #вмi† dО sъ sъ sъ +HЂ dО ™S;R • › ‚щ2 А dО эe R§ b}! р" лXй R§ R§ dО 2 А i† R •
Эцп в блокноте
䠫΀絢ء虩ܙ刕ҧ侀ْ̑ʷᬲۀì虩ܙ칤Ā侀̑侀̑侀̑䠫΀칤Ā厙ْܻʷᶛ廬ᬲۀ칤Ā旽Њ刕ҧ絢ء⋰ď士˩刕ҧ刕ҧ칤Āᬲۀ虩ܙْʷ

Где неточность вычислений- не могу найти,
возможна оплата. очень срочно надо!

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.