У меня возникли проблемы с преобразованием следующего кода из Perl в PHP. В частности, у меня возникают проблемы с этим разделом, так как я понятия не имею, что происходит здесь:Пытается преобразовать Perl в PHP
sub md5sum($) {
my @ib = unpack("C*", shift);
my $encstr = join("", map {sprintf('\%3.3o', $_)} @ib);
my ($out) = split(/ /, `printf '$encstr' | md5sum`);
return $out;
}
Главное Я ищу помощи на то, что делает "C*", shift
делать в распаковке заявлении, что происходит в части join
, и что делает | md5sum
в конце split
Для этого раздела ниже, я считаю, что у меня также проблемы. Мой главный вопрос здесь для пакета php, указать H32 или просто H?
$hexchal = pack "H32", $challenge;
$newchal = pack "H32", md5sum($hexchal . $uamsecret);
my $passvar = "";
$passvar = md5sum("\0" . $password . $newchal);
Вот что я пытался в предыдущем разделе, но $ hexchal не совпадают до
$hexchal = pack("H32", $challenge);
$newchal = md5($hexchal.$uamsecret);
$passvar = md5("\0".$password.$newchal);
Во всяком случае, любая помощь будет принята с благодарностью!
Re: «Единственная причина для распаковки, соединения и печати - обеспечить немного больше безопасности», Возможно, но я думаю, что это слишком разрешает произвольные строки, включая те, которые включают одинарные кавычки и NUL. 'printf '\ 047 \ 000' | hexdump -C' – ikegami
yes - это имеет смысл - одинарная кавычка будет мусор командной строки - не должна быть проблемой, с которой нужно справиться, переведя php для использования функции md5sum, но предоставляя более вероятную интерпретацию оригинальное намерение Perl-кодера. –
Прошу прощения, я вижу, как это будет сбивать с толку, как это было для меня, когда я впервые смотрел на нее. К счастью, оригинальный кодер оставил комментарии, чтобы объяснить, для чего был md5sum. По-видимому, md5 не работал должным образом в системе (сетевом устройстве), для которой это было первоначально закодировано, поэтому они прибегли к использованию этого метода md5sum. Надеюсь, что это прояснит! – user41593