функция крипты и ошибка ссылки "неопределенная ссылка на крипту" - PullRequest
6 голосов
/ 02 апреля 2010

Я использовал функцию crypt в c для шифрования заданной строки. Я написал следующий код,

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

int main()
{
    printf("%s\n",crypt("passwd",1000));
}

Но приведенный выше код выдал ошибку «неопределенная ссылка на« crypt »». В чем проблема в приведенном выше коде.

Заранее спасибо.

Ответы [ 6 ]

10 голосов
/ 02 апреля 2010

Если вы хотите использовать функцию crypt(), вам нужно связаться с библиотекой, которая ее предоставляет. Добавьте -lcrypt к вашей команде компиляции.

В более старых версиях glibc для этой цели была предоставлена ​​библиотека libcrypt и объявлена ​​функция в <unistd.h> - для компиляции с этой поддержкой вам также может понадобиться определить либо _XOPEN_SOURCE, либо _GNU_SOURCE в вашем коде в том числе <unistd.h>.

Более новые версии glibc не предоставляют libcrypt - вместо этого он предоставляется отдельным libxcrypt. Вы по-прежнему связываетесь с -lcrypt, но вместо этого функция объявлена ​​в <crypt.h>.

7 голосов
/ 02 апреля 2010

crypt() использует DES, который крайне небезопасен и вероятно старше вас 12 лет старше вас.

Я предлагаю вам использовать серьезный алгоритм шифрования, такой как AES. Многие библиотеки предлагают такое шифрование; OpenSSL (crypto.lib) - хороший выбор, например.

Не отвечая на ваш фактический вопрос, так как многие уже сделали

1 голос
/ 14 июля 2015

Вы должны #define __XOPEN_SOURCE, прежде чем #include файлы заголовков.

1 голос
/ 02 апреля 2010

Вам нужно поставить следующую строку перед включением:

#define _XOPEN_SOURCE
1 голос
/ 02 апреля 2010

Вам нужно включить crypt.h, если вы хотите использовать crypt(). Ниже двух других включений добавьте:

#include <crypt.h>
0 голосов
/ 02 апреля 2010

Функция crypt является нестандартной, но поставляется как расширение библиотекой GNU C в Linux. Это определено в <crypt.h>

...