我正在尝试使用维吉尼亚密码进行加密和解密。
这是一项更大任务的一部分,而维吉尼亚密码只扮演了一小部分。我从 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"
要查看它的作用,只需使用 bash 启动它-x
选项集,例如如果脚本保存在vig.sh
:
bash -x vig.sh
基本上,a
存储大写字母
-d
, 是设置时解密的可选参数m
将投注设置为-
这从输入中读取t
存储源字符串,k
the key
printf "string: ";read t
printf "keyphrase: ";read -s k
以下对变量的字符索引进行循环t
for ((i=0;i<${#t};i++)); do
p1
包含以当前字符开头的后缀的字母表t
removed
p1=${a%%${t:$i:1}*}
p2
对键中的当前字符执行相同的操作(使用模数以避免越界)
然后是之间的和或差(当设置 -d 选项时)p1
and p2
lengths 用于获取字母表中的字符并附加到d
.
Examples
vig.sh
string: HELLOWORLD
keyphrase: FOO
-> MSZQCKTFZI
vig.sh -d
string: MSZQCKTFZI
keyphrase: FOO
-> HELLOWORLD
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)