openssl解密有时会起作用

时间:2014-02-23 05:27:25

标签: c encryption openssl

我参与了此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成功退出都会停止用户输入。

1 个答案:

答案 0 :(得分:1)

正确的密码为“是”:

$ openssl enc -aes128 -base64 -d -in cipher.enc -pass pass:yes
http://www.youtube.com/watch?v=EzBIH8Frq-8&feature=player_embedded

我通过蛮力找到它:

  1. 尝试通过此脚本解码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
    
  2. 运行此脚本并通过以下命令找出所有足够长的类似字符串的字符串

    $ 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
    
  3. 和宾果,看起来我找到了secret-message。我可以通过使用密码'yes'对其进行编码并将结果与​​cipher.enc进行比较来检查这一点,也是一样的。问题解决了!


  4. 顺便说一句,看起来像openssl返回零不是找到正确密码的充分条件,因为密码'anw'也使openssl返回零。