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 である必要はないと思います (毎回上書きできます)