I just want to use crypt()
to generate an encrypted password,and I write a demo which invoke the crypt()
method.
Here is my code
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%s\n",crypt("abc","ab"));
exit(0);
}
I compile it using "gcc tem.c -lcrypt'
and when I run it, everything seems right, but a "segment error" shows up. so please tell me what's wrong with this simple program?
Use the crypt Function to Hash Passphrases for Storagecrypt takes two char* arguments passed as const qualified parameters. The first argument points to the passphrase that needs to be hashed, and the second one is the special string called setting , that should be generated using the crypt_gensalt function.
crypt() is the password encryption function. It is based on the Data Encryption Standard algorithm with variations intended (among other things) to discourage use of hardware implementations of a key search. key is a user's typed password. salt is a two-character string chosen from the set [a-zA-Z0-9./].
Most Unicies (and Linux is no exception) primarily use a one-way encryption algorithm, called DES (Data Encryption Standard) to encrypt your passwords. This encrypted password is then stored in (typically) /etc/passwd (or less commonly) /etc/shadow.
If you compile with the flag -Wall
you will see why.
If you read the manual page you will see that it uses #define _XOPEN_SOURCE
before including <unistd.h>
. It should actually be defined before including any header.
If you don't define _XOPEN_SOURCE
then the crypt
function will not be prototyped. Then the compiler doesn't know what the actual return type is, or the types and number of arguments. So it will assume that the function returns an int
and your printf
expects a string, so there will be a type mismatch that causes the crash.
You need this:
#define _XOPEN_SOURCE
at the top of your source file, before any #include
.
Alternatively compile with the gcc option -D_XOPEN_SOURCE
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With