 |
Симметричное шифрование блока данных на Perl. |
[обсудить]
|
| use Crypt::Blowfish;
use Crypt::CBC;
my $cipher = new Crypt::CBC("Секретный ключ для шифрования",'Blowfish');
my $crypted_block = $cipher->encrypt_hex($text);
my $text = $cipher->decrypt_hex($crypted_block);
$cipher->finish(); |
|
 |
|
 |
Установка русской локали в Perl скриптах. |
[обсудить]
|
| use POSIX qw(setlocale LC_ALL LC_CTYPE LC_NUMERIC);
use locale; # ru_RU.KOI8-R, ru_RU.CP1251, ru_RU.ISO-8859-5, ru_RU.UTF-8
my $g_setlocale_all = POSIX::setlocale( &POSIX::LC_ALL, "ru_RU.KOI8-R" );
my $g_setlocale_num = POSIX::setlocale( &POSIX::LC_NUMERIC, "C" );
|
|
 |
|
|
 |
Чем в perl лучше шифровать данные. |
[обсудить]
|
| Необратимое шифрование (хэш или fingerprint):
Модули (в порядке возрастания надежности) Digest::MD5, Digest::SHA1, Digest::HMAC_MD5, Digest::HMAC_SHA1
Пример: use Digest::SHA1 qw(sha1_base64);
$hash = sha1_base64("test");
Обратимое шифрование по ключу:
Модули: Crypt::DES, Crypt::HCE_SHA, Crypt::Blowfish + Crypt::CBC
Пример: use Crypt::Blowfish; use Crypt::CBC;
$cipher_handle = new Crypt::CBC($encrypt_key,'Blowfish');
$crypted_text = $cipher_handle->encrypt_hex($text);
$text = $cipher_handle->decrypt_hex($crypted_text);
Шифрование с использованием открытого ключа: Crypt::OpenPGP, Crypt::GPG , Crypt::PGP5.
|
|
 |
|
 |
Генерация случайной последовательности символов на Perl |
[обсудить]
|
| sub sys_true_rand {
my ($num_char) = @_; # Число символов в качестве параметра.
my $dev_line;
my $rand_line = "";
open(UR,"</dev/urandom") || die "Cam't open /dev/urandom"";
do {
read (UR, $dev_line, 4096);
$dev_line =~ s/[^\w\d]//g;
$rand_line .= $dev_line;
} until (length($rand_line) >= $num_char);
close(UR);
return substr($rand_line,0, $num_char);
}
|
|
 |
|
|
 |
Как в Perl вырезать у строки лидирующие пробелы |
[обсудить]
|
| $str =~ s/^\s*([^\s]?.*)$/$1/;
$str =~ s/^(.*[^\s])\s*$/$1/; # два regex работают быстрее, чем один более сложный
|
|
 |
|
 |
Как найти подстроку находящуюся в переменной с экранированием опасных символов. |
[обсудить]
|
| Для экранирования спец. символов в строке подставляемой в регуларное
выражение, строку нужно разместить между модификаторами \Q и \E,
при этом все спецсимволы не будут интерпретироваться как операторы рег. выражения.
Например: /\Q$str\E/
Или можно использовать функцию index():
$pos = index($строка, $подстрока);
if ($pos < 0){
# Подстрока не найдена.
} else {
# В $pos - позиция первой совпавшей позиции подстроки.
} |
|
 |
|
 |
Как работать с параметрами передаваемыми в командной строке |
[обсудить]
|
| use Getopt::Long;
GetOptions("prefix=s", \$prefix, "prefix-man=s", \$prefix_man);
$prefix = defined($prefix) ? $prefix : $default_install_path;
$prefix_man = defined($prefix_man) ? $prefix_man : $default_install_man;
|
|
 |
|
 |
Как преобразовать число в определенный формат |
[обсудить]
|
| Примеры:
$a = sprintf("%4.2f",$num);
$a = sprintf("%06X%06X",$num1,$num2);
$a = sprintf("%04i",$num); |
|
 |
|