Сценарий стеганографии Perl LSB

Я рассматривал небольшой образец Perl-скрипта, представленный Эндрю Кером, который выполняет стеганографию LSB в файлах PGM и PPM. (доступ - http://www.cs.ox.ac.uk/andrew.ker/docs/ADK11B.pdf)

Представленный сценарий выглядит следующим образом (работает в Ubuntu Linux):

perl -n0777 <cover-image > stego-image 
    -e’split/(\s+)/,<STDIN>,5;@z=map ord,split"",pop@_;srand key; for(0..$#z){@p[$k,$_]=($_,$p[$k=int rand$_]);} map{$z[$q=shift@p]+=($z[$q]-ord()&1)*(rand 2<=>1)} split"",unpack"B*",$_;print@_,map chr,@z;’ secret-text-file

Однако это дает мне синтаксическую ошибку, которая, я думаю, связана с использованием символа ’. У меня нет опыта работы с Perl, поэтому я замедляюсь, пытаясь понять, в чем может быть проблема.

Мы будем очень признательны за любые советы.


person jr791    schedule 24.10.2017    source источник


Ответы (1)


Похоже, что символ был преобразован любой программой обработки текстов, в которой был создан этот PDF-файл. Это должна быть одинарная кавычка '. Замените оба экземпляра, и это должно работать.

person simbabque    schedule 24.10.2017
comment
Спасибо за совет, я внес эти изменения и получил следующую ошибку: Bareword найден там, где ожидался оператор в строке 3 test.prl, рядом с секретным текстом (отсутствует оператор перед секретным текстом?) - person jr791; 24.10.2017
comment
@ jr791 почему задействован файл test.pl? Вы должны запустить это в командной строке напрямую. perl — это команда интерпретатора Perl. См. explainshell.com/ - person simbabque; 24.10.2017
comment
@ jr791, если secret-text рассматривается как часть кода Perl, вы не просто заменили два на ', как следовало бы. - person ikegami; 24.10.2017