Comments 32
UFO just landed and posted this here
Небольшой совет и сравнение скорости работы с массивами (про биты в моём комменте речи не идет).
И результат производительности для сравнения:
Чем длиннее строка, тем больше в производительности будет выигрывать «Arr push» метод.
$str = 'a'x100;
cmpthese (300, {'Arr copy' => sub {
my @bin = ();
for (my $i=0; $i < length($str); $i++) {
@bin = (@bin, split ('', sprintf "%08b", ord(substr($str, $i, 1))));
}
},
'String' => sub {
my $bin = '';
my @bin = ();
my @t = split (//, $str);
for (my $i=0; $i <= $#t; $i++) {
$bin .= sprintf ("%08b", ord($t[$i]));
}
@bin = split '', $bin;
},
'Arr push' => sub {
my @bin = ();
for (my $i=0; $i < length($str); $i++) {
push @bin, split ('', sprintf "%08b", ord(substr($str, $i, 1)));
}
}
});
И результат производительности для сравнения:
Rate Arr copy String Arr push
Arr copy 17.0/s -- -98% -99%
String 800/s 4617% -- -37%
Arr push 1277/s 7427% 60% --
Чем длиннее строка, тем больше в производительности будет выигрывать «Arr push» метод.
0
Спасибо!
Думал использовать push но решил что скорость будет порядка 'Arr copy.
Ну, будет уроком на будущее.)
Думал использовать push но решил что скорость будет порядка 'Arr copy.
Ну, будет уроком на будущее.)
0
Ну а работать с байтами проще и быстрее было бы с помощью логических операторов, таких как: "&, |, ^, >>, <<".
0
Моя задача — заменить два младших бита в байте на нужные. Возможно неправ, но не вижу способа выполнить ее одними логическими операторами, хотя возможно он есть. Попробую вечером.
0
Самое топорное и простое решение:
my $str = 255; # or other .. $str = 'a';
my @now = (1,0);
$str = ($str & 252) | (($now[0] << 1) | $now[1]);
+1
Только
$str = ($str & 0xFC) | (($now[0] << 1) | $now[1]);
Ну и, наверное, будет что-то типа
$str = ($str & 0xFC) | (($src[$i >> 2] >> (($i & 0x3 ) << 1)) & 0x3)
все же.
$str = ($str & 0xFC) | (($now[0] << 1) | $now[1]);
Ну и, наверное, будет что-то типа
$str = ($str & 0xFC) | (($src[$i >> 2] >> (($i & 0x3 ) << 1)) & 0x3)
все же.
0
Это если не разворачивать.
0
Не вижу никакой разницы, кроме идеологической, между 252 и 0xFC.
0
И вообще, надо
$b = $src[$i];
$str = ($str & 0xFCFCFCFC) | ($b & 0x03) | (($b & 0x0C) << 6) | (($b & 0x30) << 12) | (($b & 0xC0) << 18);
$b = $src[$i];
$str = ($str & 0xFCFCFCFC) | ($b & 0x03) | (($b & 0x0C) << 6) | (($b & 0x30) << 12) | (($b & 0xC0) << 18);
0
UFO just landed and posted this here
UFO just landed and posted this here
Рассматривать отличия работы метода «Arr copy», и push, если мне не изменяет память в логике работы операторов, то в приближении будет происходить следующее:
1) при @arr = (@arr, $str); происходит создание массива содержащего в себе все элементы @arr и элемент $str. После чего копирование в массив @arr.
2) При push @arr, $str; будет происходить увеличение памяти выделенной под массив @arr (если это необходимо), после чего добавление нового элемента $str.
1) при @arr = (@arr, $str); происходит создание массива содержащего в себе все элементы @arr и элемент $str. После чего копирование в массив @arr.
2) При push @arr, $str; будет происходить увеличение памяти выделенной под массив @arr (если это необходимо), после чего добавление нового элемента $str.
0
Невозможно закрыть программу, не выбрав файл
0
Однако, Perl не предоставляет возможности работать с файлом как с последовательностью битов, данные считываются минимум побайтово.
perldoc.perl.org/functions/vec.html
0
Средний исходник на perl — сам по себе пример стеганографии.
0
Если это школота — то я спокоен.
Автор, молодец!
Автор, молодец!
+2
На второй картинке невооружённым глазом заметны частые вертикальные полосы. По-моему, стеганография не получилась. Ведь принцип стеганографии — не только спрятать данные в других данных, но спрятать так, чтобы невозможно было определить сам факт упрятывания.
0
странно, ни я ни все люди кого я просил — полос не видели… можно скрин?
отвечу не раньше вечера субботы, заранее извиняюсь.
отвечу не раньше вечера субботы, заранее извиняюсь.
0
>можно скрин?
*FACEPALM*
*FACEPALM*
0
Попробуйте уменьшить яркость монитора.
Или вот ваша картинка после простого уменьшения освещённости на 25 пунктов в Гимпе:
Или вот ваша картинка после простого уменьшения освещённости на 25 пунктов в Гимпе:
0
хм, уменьшив яркость не увидел ничего, но уменьшив яркость в -100 — -150 в ШФ становится видно, да. в принципе, белый, да и любой монотонный фон действительно не самое удачный объект.
вот (2.4Мб) немонотонный объект, на нем сколько не извращался — следов «вмешательства не заметил».
файл «забит» полностью.
вот (2.4Мб) немонотонный объект, на нем сколько не извращался — следов «вмешательства не заметил».
файл «забит» полностью.
0
Sign up to leave a comment.
Стеганография на Perl