Question

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.

Was it helpful?

Solution

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>.

OTHER TIPS

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

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

#include <crypt.h>

You need to put the following line before your includes:

#define _XOPEN_SOURCE

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

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>

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top