当前位置: 技术问答>linux和unix
菜鸟问linux下C编译的问题,涉及到linux加密
来源: 互联网 发布时间:2015-02-18
本文导语: 写了一个简单的程序cryptword.c,用来验证linux的用户密码是否正确,例如执行cryptword 用户名 密码,输出为true表示正确,false表示错误。程序内容如下: #define _XOPEN_SOURCE #include #include #include #include #include #inclu...
写了一个简单的程序cryptword.c,用来验证linux的用户密码是否正确,例如执行cryptword 用户名 密码,输出为true表示正确,false表示错误。程序内容如下:
#define _XOPEN_SOURCE
#include
#include
#include
#include
#include
#include
main(int argc, char* argv[])
{
struct spwd *str ;
char *cryptedpwd;
char *found="false";
char *salt;
if (argc!=3) exit(0);
while (str=getspent())
{
if(strcmp(argv[1],str->sp_namp)==0)
{
strncpy(salt,str->sp_pwdp,11);
cryptedpwd = crypt(argv[2],salt);
if (strcmp(cryptedpwd,str->sp_pwdp)==0)
{
found = "true";
break;
}
}
}
endspent();
printf("%s",found);
}
曾经编译通过gcc -o cryptword cryptword.c,生成可执行文件cryptword,把shadow文件设置为S权限后,执行结果也正确。可是后来linux重装7.3版本(原来是7.0的),cryptword.c文件编译总是出错,错误如下:
/tmp/ccnXEqB6.o: In function `main':
/tmp/ccnXEqB6.o(.text+0x7d): undefined reference to `crypt'
collect2: ld returned 1 exit status
我查看了crypt函数的帮助文件,该用的库文件也都包含进来了,真奇怪。另外我又把以前编译通过的可执行文件cryptword拷贝过来执行了一下,出现错误:Segmentation fault。不知道这是什么意思。后来我以为是linux版本升级的原因。就把这个可执行文件放到linux7.0下执行,果然结果是正确的,可奇怪的是,在7.0下编译cryptword.c文件,错误是一样的,也是无法编译成功。
困惑中……请大侠帮忙解惑~
#define _XOPEN_SOURCE
#include
#include
#include
#include
#include
#include
main(int argc, char* argv[])
{
struct spwd *str ;
char *cryptedpwd;
char *found="false";
char *salt;
if (argc!=3) exit(0);
while (str=getspent())
{
if(strcmp(argv[1],str->sp_namp)==0)
{
strncpy(salt,str->sp_pwdp,11);
cryptedpwd = crypt(argv[2],salt);
if (strcmp(cryptedpwd,str->sp_pwdp)==0)
{
found = "true";
break;
}
}
}
endspent();
printf("%s",found);
}
曾经编译通过gcc -o cryptword cryptword.c,生成可执行文件cryptword,把shadow文件设置为S权限后,执行结果也正确。可是后来linux重装7.3版本(原来是7.0的),cryptword.c文件编译总是出错,错误如下:
/tmp/ccnXEqB6.o: In function `main':
/tmp/ccnXEqB6.o(.text+0x7d): undefined reference to `crypt'
collect2: ld returned 1 exit status
我查看了crypt函数的帮助文件,该用的库文件也都包含进来了,真奇怪。另外我又把以前编译通过的可执行文件cryptword拷贝过来执行了一下,出现错误:Segmentation fault。不知道这是什么意思。后来我以为是linux版本升级的原因。就把这个可执行文件放到linux7.0下执行,果然结果是正确的,可奇怪的是,在7.0下编译cryptword.c文件,错误是一样的,也是无法编译成功。
困惑中……请大侠帮忙解惑~
|
# gcc -o cryptword cryptword.c -lcrypt
should be ok.
should be ok.
|
编译时增加 -lcrypto(可能是-lcrypt),记不清楚了。
gcc -o cryptword cryptword.c -lcrypto
gcc -o cryptword cryptword.c -lcrypto
|
使用
gcc -o cryptword cryptword.c -lcrypt -g编译
gdb cryptword调试
我授你渔:)
gcc -o cryptword cryptword.c -lcrypt -g编译
gdb cryptword调试
我授你渔:)
|
在我的机器上 rh7.2 没问题
(使用root权限执行)
gcc -g -o cryptword cryptword.c -lcrypt
./cryptword root 1234567
ture
(使用root权限执行)
gcc -g -o cryptword cryptword.c -lcrypt
./cryptword root 1234567
ture