Как отправить соль из одной функции в другую в C-программировании - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю с проектом, в котором я хочу отправить соль для хешированного пароля от одной функции к другой, и я получаю странный вывод, и мне было интересно, если кто-нибудь знает, что я делаю неправильно?

#include <sys/random.h>

char superSalt[];
void function1(){
char salt[13]="$1$abcdefgh$";
getrandom(salt+3,8,0);
    for(unsigned int i=3;i<11;i++){
        salt[i]=saltchars[salt[i] & 0x3f];
    }
    superSalt = salt;
}

void function2(){
    printf("salt: %s\n", superSalt);
}

когда я распечатываю это в функции 1, я могу прочитать это, но я не могу прочитать это, если я печатаю это в функции 2, так что это может быть я, кто не понимает, как использовать переменные, я думаю

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

В вопросе, который вы задали, вы хотите передать соль от одной функции другой функции, но на самом деле вы ничего не передаете, вы пытаетесь использовать глобальную переменную для хранения значения соли и использовать ее в другой функции (которая имеет свои проблемы и справедливо отмечен @kelalaka), но если вы хотите придерживаться своего исходного вопроса, в котором вы действительно хотите передать значение соли другой функции, то вы можете переписать свой код примерно так:

#include <sys/random.h>

//char superSalt[] --- Not required anymore;
void function1(){
char salt[13]="$1$abcdefgh$";
getrandom(salt+3,8,0);
for(unsigned int i=3;i<11;i++){
    salt[i]=saltchars[salt[i] & 0x3f];
}
function2(salt);
}

void function2(char * salt){
 printf("salt: %s\n", salt);
}
0 голосов
/ 05 ноября 2018

Прежде всего

  1. superSalt[] не допускается в C. Вы должны дать размер.
  2. Во-вторых, вы не изменили superSalt в function1
  3. Использование глобальных переменных не рекомендуется, оставляя их для удаления вам.
Заголовок

не включен.

char superSalt[13];

void function1(){
    char salt[13]="$1$abcdefgh$";
    getrandom(salt+3,8,0);
    for(unsigned int i=3;i<11;i++){
        superSalt[i]=salt[salt[i] & 0x3f];
    }
}

void function2(){
    printf("superSalt:");
    for(unsigned int i=3;i<11;i++){
        printf("%c",superSalt[i]);
    }
}

int main()
{
    function1();
    function2();
}
...