0

DES ベースの暗号化されたパスワードをクラックするプログラムを C で作成しています。パスワードを引数として取り、パスワードを教えてくれます。

私がしたことは、同じソルト (最初の 2 文字) で暗号化して 500000 語を試し、それを argv[1] (解読したい暗号化されたパスワード) と比較することでした。ブルートフォース(可能な限りのことをしようとする)と呼ばれるものだと思います。とにかく私の問題は、単語を暗号化するときに、異なる暗号化(同じソルトと同じキー)を取得することです。数字、単語、暗号化を出力します(機能するかどうかを確認するためだけです)必要に応じてそれらを削除できます!

ところで、私はCを初めて使用し、ファイルについてまだ学んでいないので、あるWebサイトからファイルから行を読み取るコードを取得しました!

優しくしてください。私は本当に新しいのです :D。デザインやコードについてコメントがあれば教えてください :)!

ところで、私は XHarved から cs50 コースを受講していますが、これはハッカー エディションに含まれているため、受講する必要はありません。それは追加の宿題のようなものです!

例: crypt 関数で「crimson」という単語を暗号化すると、50yoN9fp966dU になりますが、ファイルからインポートしてから暗号化すると、別のものになります (50fy...)。

長い質問で申し訳ありません:|!

必要に応じて参照してください: http://d2o9nyf4hwsci4.cloudfront.net/2014/x/psets/2/hacker2/hacker2.html#_passwords_em_et_cetera_em

#include <stdio.h>
#include <unistd.h>
#include <cs50.h>
#include <string.h>

#define _XOPEN_SOURCE

char *crypt(const char *key, const char *salt);


int main(int argc, char *argv[])
{
    static string cryptedText[500000];
    static char word[500000][50];
    string salt;
    int i = 0;

    if (argc != 2) 
        return 1;

    FILE *fp;

    fp=fopen("wordsTest.txt","r");
      if(fp==NULL)
    {
      printf("Unable to open file.\n");
      exit(1);
    }

    // the first 2 characters are the salt.
    salt = strcat(&argv[1][0], &argv[1][1]);

    /*crypt every word in wordsTest with the same "salt" and 
    test if it equals argv[1](crypted pass) */
    do
    {

    if(fgets(word[i],50,fp)!=NULL)
        printf("%i ----> %s",i , word[i]);

    cryptedText[i] = crypt(word[i], salt);
    printf("%s\n", cryptedText[i]);

    i++;

    }
    while (strcmp(cryptedText[i - 1], argv[1]) != 0);


    printf ("%s\n", word[i - 1]);

}

cryptedText 変数は 500000 である必要はないと思います (毎回上書きできます)

4

1 に答える 1