簡體   English   中英

功能僅適用一次 - C

[英]Function only works once - C

我一直在嘗試制作一個基本的XOR頭文件,以便在將來的程序中使用。 到目前為止,我已經完成了幾乎所有工作,但我似乎無法使用相同的功能兩次。 如果我調用該函數來加密它可以工作的字符串,但是如果我再次調用它就會崩潰。 我不知道我是在記憶中做錯了什么還是遺漏了一些明顯的東西。 希望有人可以指出這方面的缺陷,因為我似乎找不到任何錯誤。

編輯:如果發布這么多太多,請隨意修剪代碼。 我已經拿出了相當多的東西,所以我不只是粘貼我的項目並希望有人修復它。

// 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;
}
char *encrypted = malloc (sizeof (input));

可能是問題,因為這將始終是sizeof(char *) 我想你想要的

char *encrypted = malloc (strlen (input) + 1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM