维热内密码解密

Posted

技术标签:

【中文标题】维热内密码解密【英文标题】:Vigenére cipher decryption 【发布时间】:2018-04-25 11:58:49 【问题描述】:

我正在尝试使用 vigenere cipher 进行加密和解密。

这是一项更大任务的一部分,而 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"

【问题讨论】:

【参考方案1】:

要查看它的作用,只需使用 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 对键中的当前字符执行相同的操作(使用模数以避免超出范围)

然后p1p2 长度之间的和或差(当设置-d 选项时)用于获取字母表中的字符并附加到d

例子

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

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

【讨论】:

感谢您的回答-尽管我理解您的一些解释,但我仍然完全空白。但是关于如何反转所以我可以用它来解密我不知道从哪里开始 我现在已经尝试了 2 个小时,看看我是否可以通过你给出的解释来解密。我看到你的例子,但不理解公关说。我首先在解密脚本中还需要 A=ABCDE... 吗?在我看来,a="$d" 在解密中,但我在哪里得到声明的 alphabit + a=ABCDEFGHIJKLMNOPQRSTUVWXYZ + [[ '' != '' ]] + m= + t=TEST + printf '明文:'明文:+ read -s k + printf '\n' + ( ( i=0 )) + (( i a=ABCDEF..Z,只是从数字到字母并返回的技巧,例如对于字母Ip=$a%I*; echo $#p将给出8并开始来自8echo $a:8:1 将给I【参考方案2】:

要运行解密,请在命令中键入 ./vig.sh -d。应该这样做,因为您已经在代码中声明了 [[ "$*/-d/" != "" ]]。

【讨论】:

以上是关于维热内密码解密的主要内容,如果未能解决你的问题,请参考以下文章

内网常用工具密码获取扩大战果

Visual Studio 2019下用 C# 实现 Hill2 二阶希尔密码 的加密解密 GUI界面

凯撒密码实现英文短句的加解密

解密设备密码

java密码加密与解密

Laravel 密码管理器解密密码