今後のいくつかのプログラムで使用するための基本的なXORヘッダーファイルを作成しようとしています。これまでのところ、私はほとんど全てを動かすことができましたが、同じ機能を2回使用することはできません。文字列を暗号化する関数を呼び出すと動作しますが、再度呼び出すとクラッシュします。私は何か記憶的に間違ったやり方をしているのか分かりませんか分かりません。私は間違ったことを見つけることができないので、誰かがこれの欠陥を指摘できることを願っています。機能は一度しか動作しません - C
編集:これをあまりにも多く投稿している場合は、コードをトリムしてください。私はすでにかなり出てきたので、私は自分のプロジェクトをペーストして誰かがそれを修正してくれるのではない。
// Main.c
#define MAX_LENGTH 255
#define KEY_SIZE 8
int main(int argc, char *argv[]) {
//Get String to XOR
char *input = malloc (MAX_LENGTH);
printf("Enter a string to encrypt: ");
fgets(input, MAX_LENGTH, stdin);
if(input[strlen (input) - 1] == '\n') {
input[strlen (input) - 1] = '\0';
}
//Create a random key
char *pass = _create_key(KEY_SIZE);
int len = strlen (input);
printf("Length of key is %d\n", KEY_SIZE);
printf("Entered String: %s - Password: %s\n", input, pass);
//Encrypt works fine
char *encrypted = malloc (sizeof (input));
_xor_str_s(input, pass, len, encrypted);
printf("Encrypted String: %s\n", encrypted);
char *decrypted = malloc (sizeof (input));
//Crashes here
_xor_str_s(encrypted, pass, len, decrypted);
printf("Decrypted String: %s\n", decrypted);
return 0;
}
//Header File Function
void _xor_str_s(char *str, char *pass, int len, char *out) {
int i = 0;
for(i = 0; i < len; i++) {
*(out + i) = str[i]^pass[i % strlen (pass)];
}
*(out + i) = 0;
}
char * _create_key(int len) {
len = !len ? 16 : len;
char *ret = (char *)malloc (len);
unsigned int _GLOBAL_SEED_ = (unsigned int)time(NULL);
srand (_GLOBAL_SEED_);
int i = 0;
for(i = 0; i < len; i++) {
ret[i] = (char)(rand() + 1); //+1 avoids NULL
}
ret[i] = '\0';
return ret;
}
表示されるエラーメッセージは何ですか? –
コンパイルエラーはなく、実行時にメッセージなしでクラッシュします。私が追加すべきもう一つのことは、4文字の単語とその他の長さで動作するが、8で割り切れるものやその他のランダムな長さではいつもクラッシュするということだ。私は何が起こっているのだろうかと思います。 – ozdrgnaDiies
'_xor_str_s'に' NULL'参照チェックがありません。 'malloc'呼び出しの後で常に' NULL'をチェックしてください。 –