#perl #encryption
#perl #шифрование
Вопрос:
Я пытаюсь сделать скрипт несколько более удобным для пользователя, поскольку он каждый раз просит меня вводить мой пароль. Я хочу ввести пароль, записать его в зашифрованный файл и прочитать его обратно в расшифрованном виде.
Я погуглил это здесь, поэтому попытался ввести это. К сожалению, decode_base64 не возвращает введенный мной пароль.
Я надеялся, что будет очень простой способ шифрования / дешифрования в perl. Кто-нибудь может мне помочь?
Для справки, изменения, которые я внес
шифрование:
my $msg = "Enter password for ".$ENV{'USERNAME'}.": ";
UTILS_print( $msg );
# Do not show the password
ReadMode('noecho');
chomp($password = ReadLine());
ReadMode('normal');
# Store encrypted password
if (open(FILE, '>', "$pwdFile")) {
my $hidden = crypt $password, join "",
('.', '/', 0..9, 'A'..'Z', 'a'..'z') [rand 64, rand 64];
print FILE $hidden;
close(FILE);
}
расшифровать:
# Use a stored password when no password is set during start of script
my $pwdFile = 'c:/Localdata/nexus_upload_'.$ENV{'USERNAME'}.'.pwd';
if ( $password eq '' ) {
if ( -e "$pwdFile" ) {
if (open(FILE, "$pwdFile")) {
my @lines = <FILE>;
close(FILE);
$password = $lines[0];
chomp $password;
$password = decode_base64($password);
}
}
}
Ответ №1:
Из документации к crypt()
функции:
зашифровать ОТКРЫТЫЙ ТЕКСТ, СОЛЬ
Создает строку дайджеста, точно такую же, как функция crypt(3) в библиотеке C (при условии, что у вас действительно есть версия, которая не была удалена как потенциальный боеприпас).
crypt
является односторонней хэш-функцией. ОТКРЫТЫЙ ТЕКСТ и СОЛЬ превращаются в короткую строку, называемую дайджестом, которая возвращается. Один и тот же ОТКРЫТЫЙ ТЕКСТ и СОЛЬ всегда будут возвращать одну и ту же строку, но нет (известного) способа получить исходный открытый ТЕКСТ из хэша. Небольшие изменения в ОТКРЫТОМ ТЕКСТЕ или СОЛИ приведут к большим изменениям в дайджесте.Нет функции дешифрования. Эта функция не так уж полезна для криптографии (для этого поищите модули Crypt в вашем ближайшем зеркале CPAN), а название «crypt» немного неправильно. Вместо этого он в основном используется для проверки, совпадают ли два фрагмента текста, без необходимости передавать или сохранять сам текст. Примером является проверка правильности ввода пароля. Сохраняется дайджест пароля, а не сам пароль. Пользователь вводит пароль, который зашифрован с той же солью, что и сохраненный дайджест. Если два дайджеста совпадают, пароль правильный.
Обратите внимание, что там написано «Нет функции дешифрования».
Веб-страница, с которой вы получаете этот код, несет чушь. Если вы запустите пример кода с этой страницы, вы получите этот вывод:
Encrypted Password :: B2rm1NvmFuLww
Decrypted Password :: j������
Password In Plain Text :: GeeksforGeeks
Это не работает.
decode()
Функция из MIME::Base64 является обратной encode()
функции из того же модуля. Вы могли бы использовать это, чтобы «замаскировать» свой пароль в файле на вашем диске, но это, конечно, не шифрование, и оно действительно не добавит никакой безопасности.
В качестве альтернативы, следуйте рекомендациям в документации и посмотрите на модули в пространстве имен «Crypt».
Комментарии:
1. Ах, хорошо, это объясняет, почему у меня это не работает. Спасибо за объяснение! Я посмотрю на модуль Crypt. Спасибо