Linux crypt函数的使用

crypt函数用来加密,目前Linux平台上加密的方法大致有MD5, DES, 3 DES

在RedHat平台上MD5和DES用的多一些。crypt函数的原形是:

char *crypt(const char *key, const char *salt);

key就是我们要传入的明文,salt是我们指定用来加密的密钥,返回值就是加密后的密文。

关键就是这个密钥salt,这里通过我们的实验,发现:

(1)salt这个字符串如果以$1$开头,以$结尾,那么这表示让crypt用MD5的方式加密,加密后出来的密文格式就是 $1$...$<密文正文> ,夹在$1$和$之间的字符串就是我们指定的密钥文字。这个密钥文字最多不能超过8个字符。

在EasyCluster的一些安装配置脚本中,我们就是用了这种加密方式,取出本机的MAC地址,然后用我们定义好的一个密钥加密,加密完成后 将密文中$1$...$这部分去掉,只保留后面的密文在license文件中,这样别人就不知道我们用什么密钥进行了加密,就算知道我们是针对MAC地址 加密的,但是由于不知道密钥是什么,所以还是安全的。(当然,破解者可以看我们验证license的汇编代码,一样能看到,HOHO)

(2)如果salt字符串不是(1)方式的格式,那默认就用DES加密方法。DES加密时,salt只能取两个字符,也就是说,salt最多不能 超过2个字符,多出的字符会被丢弃。(SuSE上的3 DES不清楚是怎么一个约定),用DES加密出来的密文前两个字符就是密钥。后面紧跟着的就是真正的密文。

在使用crypt函数的时候,在代码的开头,要定义这个常量:

#define _XOPEN_SOURCE

具体可以看man 3 crypt,这个常量的含义,在APUE第二章讲的很清楚。如果不定义这个常量,在有些Linux上没问题,但是在有些Linux上,就会出现crypt返回空指针的错误

猜你喜欢

转载自blog.csdn.net/u011029104/article/details/108405034