我参与了此problem。如果我尝试解密我加密的小短语,如“你好那里”,我的代码有效,但它不适用于给定的密文。我是openssl的新手,我找不到什么问题。
int main ()
{
int i, j, k, ret, m;
char pwd[4];
char lower_alphabet[26] = "abcdefghijklmnopqrstuvwxyz";
for (i=0; i<26; i++)
{
for(j=0; j<26; j++)
{
for(k=0; k<26; k++)
{
char cmd[70] = "openssl enc -aes128 -base64 -d -in cipher.enc -pass pass:";
snprintf(pwd, sizeof(pwd), "%c%c%c", lower_alphabet[i], lower_alphabet[j], lower_alphabet[k]);
strncat (cmd, pwd, 3);
if ((ret = system(cmd)) == 0)
{
printf("\n%s\n",pwd);
scanf ("%d", &m);
}
}
}
}
}
所以我的代码尝试了所有可能的密码值,每次openssl成功退出都会停止用户输入。
答案 0 :(得分:1)
正确的密码为“是”:
$ openssl enc -aes128 -base64 -d -in cipher.enc -pass pass:yes
http://www.youtube.com/watch?v=EzBIH8Frq-8&feature=player_embedded
我通过蛮力找到它:
尝试通过此脚本解码cipher.enc消息,其中包含三个小写字母的所有可能组合:
#!/bin/bash
for a in {a..z}; do
for b in {a..z}; do
for c in {a..z}; do
echo -e "\n"
openssl enc -aes128 -base64 -d -in cipher.enc -pass pass:$a$b$c
echo -e "\nPASSWD: $a$b$c\n"
done
done
done
运行此脚本并通过以下命令找出所有足够长的类似字符串的字符串
$ egrep -an --color '.*[[:alpha:]]{8,}' all.txt
6401:??l$?? f?T^0?@fJ8)?f?℗???uuEb??KFrVw????߁?LHtsQyfe?
C5y
56180:?RCpWmnuWЇ_?y???\߱???cg???V?ߥŕ??{?GyD_?ڼZ???JN+;#?
85793:http://www.youtube.com/watch?v=EzBIH8Frq-8&feature=player_embedded
和宾果,看起来我找到了secret-message
。我可以通过使用密码'yes'对其进行编码并将结果与cipher.enc
进行比较来检查这一点,也是一样的。问题解决了!
顺便说一句,看起来像openssl
返回零不是找到正确密码的充分条件,因为密码'anw'也使openssl
返回零。