Расшифровка Vigenére шифра - PullRequest
       20

Расшифровка Vigenére шифра

0 голосов
/ 25 апреля 2018

я пытаюсь сделать шифрование и дешифрование с помощью Vigenere Cipher.

Это часть большой задачи, в которой Вигенера играет небольшую роль. Я получил этот скрипт шифрования от Bash на работу. Проблема в том, как я могу использовать тот же код в обратном порядке, чтобы расшифровать код

Vigenère cipher in pure bash
#!/usr/local/bin/bash
# vigenere.sh
# http://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher

a="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

[[ "${*/-d/}" != "" ]] &&
echo "Usage: $0 [-d]" && exit 1
m=${1:+-}

printf "string: ";read t
printf "keyphrase: ";read -s k
printf "\n"
for ((i=0;i<${#t};i++)); do
p1=${a%%${t:$i:1}*}
p2=${a%%${k:$((i%${#k})):1}*}
d="${d}${a:$(((${#p1}${m:-+}${#p2})%${#a})):1}"
done
echo "$d"

Я не математический гений или программист, так что вся помощь, которую я могу получить, была бы хороша. Если кто-то может объяснить или отменить это, чтобы он мог также дешифровать или рассказать, как работает код, так что у меня есть понимание того, что происходит, было бы неплохо.

// нео

1 Ответ

0 голосов
/ 25 апреля 2018

Чтобы увидеть, что он делает, просто запустите его с установленной опцией bash -x, например, если скрипт сохранен в vig.sh:

bash -x vig.sh

в основном, a для хранения заглавных букв

-d, является необязательным параметром для дешифрования, когда установлено, m будет делать ставку на -

, это считывает со входа t для хранения исходной строки, kклавиша

printf "string: ";read t
printf "keyphrase: ";read -s k

следующее делает цикл по символьным индексам переменной t

for ((i=0;i<${#t};i++)); do

p1 содержит алфавит с суффиксом, начинающимся с удаления текущего символа из t

p1=${a%%${t:$i:1}*}

p2 делает то же самое с текущим символом от ключа (по модулю, чтобы избежать выхода за пределы)

затем сумма или разница (когда установлена ​​опция -d) междуДлина p1 и p2 используется для получения символа в алфавите и добавляется к d.

Примеры

vig.sh
string: HELLOWORLD
keyphrase: FOO
-> MSZQCKTFZI

vig.sh -d
string: MSZQCKTFZI
keyphrase: FOO
-> HELLOWORLD
...