← All posts tagged code

С пылу, с жару: Небольшой скриптик для кодирования паролей. 

Юзкейс: Запоминаем одну последовательность символов, и используя её в качестве ключа шифруем пароли, которые потом помещаем в органайзер. 
При необходимости восстановить пароль, пользуемся таблицей Вижинера ключевой последовательностью.

------
#!perl
use strict;

# Подготовка
my (@alphabet) = ('0'..'9','A'..'Z'); # Таблица Вижинера
my (%char_to_code, %code_to_char, $i,$word, $key);
$i=0;
foreach (@alphabet) {
	$code_to_char{$i} = uc($_);
	$char_to_code{ uc($_)} = $i++;
}

# Получаем ключ
# ToDO: Получить ключ не выводя его на экран, или скрывать после ввода.
print "Простое шифрование по таблице Вижинера.\nВведите ключ: ";
$key = <STDIN>;
chomp ($key);

# теперь получаем текст
print "Текст (Для выхода - пустая строка): ";
while (<STDIN>) {
	chomp;
	$word = $_;
	if ($word eq "" ) {last;}
	
	{ # Кодируем по таблице Вижинера
		my($genkey,$result);
		
		for (my($i) = 0;$i< length ($word);$i++)  {
			my($ki,$genchar,$kchar,$char);
			$char = substr ($word, $i,1);
			$kchar = substr($key, ($i % length($key)) , 1);
			$genkey= "$genkey$kchar";
			$genchar = $code_to_char{($char_to_code{uc($char)} + $char_to_code{uc($kchar)})% $#alphabet };
			$result = "$result$genchar";
		}

		print "$word => $result\n" ;
	}
	
	print "\n\nТекст: ";
}

print "\n\Пока!";