Я создаю модуль Perl, который предоставляет интерфейс OO для стороннего API. Я хочу захватить и сохранить пароль пользователя в зашифрованном формате, прежде чем он будет передан стороннему API. Модуль предназначен только для UNIX-систем.
Я создал следующий script, который выполняет функцию захвата - это правильно в том смысле, что он хранит только переменную пароля в зашифрованном формате? Я обеспокоен тем, что пароль может быть доступен в памяти в другом месте (например, в $_ хотя $_ - undef).
NB. Я использую STDIN, а не @ARGV, допуская, что ОС не будет регистрировать запись или включать пароль в имя процесса. Я использую заменяющее регулярное выражение, а не chomp, так что вход не должен храниться во временной нешифрованной переменной. Я также предполагаю, что невозможно быть полностью защищенным в том смысле, что программное обеспечение захвата ввода все равно может захватывать ввод пользователя.
Заранее спасибо
use strict;
use warnings;
use Crypt::CBC;
use 5.14.0;
print 'Please enter your password: ';
system('tty -echo');
my $key = Crypt::CBC->random_bytes(56);
my $iv = Crypt::CBC->random_bytes(8);
my $cipher = Crypt::CBC->new(-key => $key,
-cipher => 'Blowfish',
-salt => 1,
);
my $ciphertext = $cipher->encrypt(<STDIN> =~ s/\n$//r);
system('tty echo');