我试着用vigenere密码进行加密和解密。
它是一项更大任务的一部分,在这个任务中,病毒在其中起着很小的作用。我从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"发布于 2018-04-25 12:53:14
要查看它所做的,只需使用bash -x选项集启动它,例如,如果脚本保存在vig.sh中
bash -x vig.sh基本上,a存储大写字母
-d,是一个可选的参数,当set m将打赌设置为-时,可以解密。
这将从输入t读取以存储源字符串,k存储键。
printf "string: ";read t
printf "keyphrase: ";read -s k下面对变量t的字符索引进行循环
for ((i=0;i<${#t};i++)); dop1包含以t中当前字符开头的后缀的字母表。
p1=${a%%${t:$i:1}*}p2对来自键的当前字符也这样做(使用模以避免超出范围)
然后使用p1和p2长度之间的和或差(当设置了p2选项时)来获得字母表中的字符并附加到d中。
示例
vig.sh
string: HELLOWORLD
keyphrase: FOO
-> MSZQCKTFZI
vig.sh -d
string: MSZQCKTFZI
keyphrase: FOO
-> HELLOWORLD发布于 2020-10-09 06:23:57
若要运行解密,请在逗号中键入./vit.sh -d。这应该可以做到,因为您已经在代码中声明了[${*/-d/}“!=”]。
https://stackoverflow.com/questions/50021770
复制相似问题