encrypt函数c语言,Crypt加密函数简介(C语言)

定义函数

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

函数说明

crypt是个密码加密函数,它是基于Data Encryption Standard(DES)演算法。crypt只适用于密码的使用,不适合用于资料加密。

crypt()将参数key所指的字符串加以加密,key字符串长度仅取前8个字符,超过此长度的字符没有意义。参数salt为两个字符组成的字符串,由a-z、A-Z、0-9,“.”和“/”所组成,用来决定使用4096(a-z、A-Z、0-9,“.”和“/”共64个字符,64的平方为4096)种不同内建表格的哪一个。函数执行成功后会返回指向编码过的字符串指针,参数key所指的字符串不会有所更动。编码过的字符串长度为13个字符,前两个字符为参数salt代表的字符串。

返回值

返回一个指向以NULL结尾的密码字符串。

注意编译时要在末尾添加-lcrypt选项。

/**

* gcc -o crypt crypt.c -lcrypt

*/

#include

#include

#include

intmain(void)

{

charpasswd[13];

char*key;

charslat[2];

key=getpass("Input First Password:");

slat[0]=key[0];

slat[1]=key[1];

strcpy(passwd,crypt(key,slat));

key=getpass("Input Second Password:");

slat[0]=passwd[0];

slat[1]=passwd[1];

printf("After crypt(),1st passwd :%s/n", passwd);

printf("After crypt(),2nd passwd:%s /n", crypt(key,slat));

return0;

}

程序运行结果:(注:两次输入一样)

Input First Password:

Input Second Password:

After crypt(),1st passwd :asZvhAtTX.i

7g

After crypt(),2nd passwd:asZvhAtTX.i

7g

相关函数:crypt 表头文件:#include 函数定义:char *getpass(const char *prompt) 函数说明:getpass()会显示参数prompt所指的字符串,然后从/dev/tty中读取所输入的密码,若无法从/dev/tty中读取则会转从标准输入设备中读取密码。所输入的密码长度限制在128个字符,包含结束字符NULL, 超过长度的字符及换行字符/n将会被忽略。在输入密码时getpass()会关闭字符回应,并忽略一些信号如CTRL-C 或 CTRL-Z所产生的信号 返回值   :返回一个指向以NULL结尾的密码字符串 附加说明:为了系统安全考虑,在般在使用getpass()输入密码后,该密码最好尽快处理完毕,然后将该密码字符串清除 范例参crypt()

DES(Data Encryption Standard),是一种分组密码算法,用于对数据进行加密和解密。在C语言中实现DES加密,你需要使用到开源库如openssl,它提供了一套完整的加密功能,包括DES。 以下是一个简单的步骤说明如何使用openssl库在C语言中实现DES加密: 1. 引入头文件:首先需要包含openssl库的头文件,例如`#include <openssl/des.h>`。 2. 初始化:创建一个 DES 加密上下文(context)。你可以使用`DES_CTX *ctx = DES_new()`初始化一个新的结构。 3. 设置模式:如果要用到ECB(Electronic Codebook)模式,可以使用`DES_set_encrypt_mode(ctx)`;如果用CBC(Cipher Block Chaining)或其他模式,需相应设置。 4. 转换为二进制:将明文字符串转换为DES块大小(64位)的二进制数组。 5. 加密过程:调用`DES_crypt()`函数,传入待加密的数据和上下文。 ```c unsigned char key[8]; // 密钥,长度应为8字节 char plaintext[80]; // 明文,注意AES-128需要16字节,AES-256需要32字节 unsigned char ciphertext[80]; // 存放加密后的结果 DES_KEY_schedule(key, &key_schedule); // 根据密钥生成加密序列 DES_set_key(&key_schedule, ctx); // 将密钥应用到上下文中 DES_ecb_encrypt(plaintext, ciphertext, ctx, DES_ENCRYPT); // 加密 ``` 6. 清理资源:完成操作后,记得释放上下文和其他内存资源,如`DES_free_key(&key_schedule)`和`DES_CTX_free(ctx)`。 请注意,实际编程中,为了安全性和易用性,建议使用更高级的安全库或封装好的API,而不是直接使用低级的DES API。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值