7

I have used the crypt function in c to encrypt the given string. I have written the following code,

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

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

But the above code threw an error ,"undefined reference to `crypt'". What is the problem in the above code.

Thanks in advance.

jww
  • 97,681
  • 90
  • 411
  • 885
kiruthika
  • 2,155
  • 7
  • 26
  • 33

6 Answers6

13

If you want to use the crypt() function, you need to link to the library that supplies it. Add -lcrypt to your compile command.

Older versions of glibc supplied a libcrypt library for this purpose, and declared the function in <unistd.h> - to compile against this support, you may also need to define either _XOPEN_SOURCE or _GNU_SOURCE in your code before including <unistd.h>.

Newer versions of glibc don't supply libcrypt - it is instead provided by a separate libxcrypt. You still link with -lcrypt, but the function is instead declared in <crypt.h>.

caf
  • 233,326
  • 40
  • 323
  • 462
7

crypt() uses DES which is extremely insecure and probably older than you 12 years older than you.

I suggest you use a serious encryption algorithm, such as AES. Many libraries offer such encryption; OpenSSL (crypto.lib) is a good choice for example.

Not answering your actual question since a lot of people already did

Andreas Bonini
  • 44,018
  • 30
  • 122
  • 156
  • 3
    "The GNU C Library used by almost all Linux distributions provides an implementation of the crypt function which supports the DES, MD5, and SHA based hashing algorithms" (according to Wikipedia at least) – Joey Apr 02 '10 at 07:38
2

You have to #define __XOPEN_SOURCE before you #include the header files.

ZygD
  • 22,092
  • 39
  • 79
  • 102
Qwerty
  • 21
  • 3
1

You need to include crypt.h if you want to use crypt(). Below your other two includes, add:

#include <crypt.h>
Chad Birch
  • 73,098
  • 23
  • 151
  • 149
1

You need to put the following line before your includes:

#define _XOPEN_SOURCE
a'r
  • 35,921
  • 7
  • 66
  • 67
0

The crypt function is non-standard, but is supplied as an extension by the GNU C library on Linux. It's defined in <crypt.h>

GManNickG
  • 494,350
  • 52
  • 494
  • 543