首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vigenére密码解密

Vigenére密码解密
EN

Stack Overflow用户
提问于 2018-04-25 11:58:49
回答 2查看 1.8K关注 0票数 0

我试着用vigenere密码进行加密和解密。

它是一项更大任务的一部分,在这个任务中,病毒在其中起着很小的作用。我从bash得到了这个加密脚本。问题是如何反向使用相同的代码来解密代码。

代码语言:javascript
复制
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"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-25 12:53:14

要查看它所做的,只需使用bash -x选项集启动它,例如,如果脚本保存在vig.sh

代码语言:javascript
复制
bash -x vig.sh

基本上,a存储大写字母

-d,是一个可选的参数,当set m将打赌设置为-时,可以解密。

这将从输入t读取以存储源字符串,k存储键。

代码语言:javascript
复制
printf "string: ";read t
printf "keyphrase: ";read -s k

下面对变量t的字符索引进行循环

代码语言:javascript
复制
for ((i=0;i<${#t};i++)); do

p1包含以t中当前字符开头的后缀的字母表。

代码语言:javascript
复制
p1=${a%%${t:$i:1}*}

p2对来自键的当前字符也这样做(使用模以避免超出范围)

然后使用p1p2长度之间的和或差(当设置了p2选项时)来获得字母表中的字符并附加到d中。

示例

代码语言:javascript
复制
vig.sh
string: HELLOWORLD
keyphrase: FOO
-> MSZQCKTFZI

vig.sh -d
string: MSZQCKTFZI
keyphrase: FOO
-> HELLOWORLD
票数 1
EN

Stack Overflow用户

发布于 2020-10-09 06:23:57

若要运行解密,请在逗号中键入./vit.sh -d。这应该可以做到,因为您已经在代码中声明了[${*/-d/}“!=”]。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50021770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档