c语言实现des加密解密
时间: 2023-10-16 14:07:34 浏览: 135
DES加密解密纯C语言
DES是一种对称加密算法,可以用C语言实现加密和解密。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/des.h>
void des_encrypt(const char *key, const char *input, char *output)
{
// 创建key
DES_cblock des_key;
DES_key_schedule des_key_schedule;
memset(des_key, 0, sizeof(des_key));
memcpy(des_key, key, strlen(key) > 8 ? 8 : strlen(key));
DES_set_key_checked(&des_key, &des_key_schedule);
// 加密
DES_cblock input_block, output_block;
memset(input_block, 0, sizeof(input_block));
memset(output_block, 0, sizeof(output_block));
memcpy(input_block, input, strlen(input) > 8 ? 8 : strlen(input));
DES_ecb_encrypt(&input_block, &output_block, &des_key_schedule, DES_ENCRYPT);
// 输出结果
for (int i = 0; i < 8; i++) {
sprintf(output + i * 2, "%02x", output_block[i]);
}
}
void des_decrypt(const char *key, const char *input, char *output)
{
// 创建key
DES_cblock des_key;
DES_key_schedule des_key_schedule;
memset(des_key, 0, sizeof(des_key));
memcpy(des_key, key, strlen(key) > 8 ? 8 : strlen(key));
DES_set_key_checked(&des_key, &des_key_schedule);
// 解密
DES_cblock input_block, output_block;
memset(input_block, 0, sizeof(input_block));
memset(output_block, 0, sizeof(output_block));
for (int i = 0; i < strlen(input) / 2; i++) {
sscanf(input + i * 2, "%02x", &input_block[i]);
}
DES_ecb_encrypt(&input_block, &output_block, &des_key_schedule, DES_DECRYPT);
// 输出结果
memcpy(output, output_block, 8);
}
int main()
{
char key[] = "12345678";
char input[] = "hello";
char output[17];
des_encrypt(key, input, output);
printf("加密结果: %s\n", output);
des_decrypt(key, output, input);
printf("解密结果: %s\n", input);
return 0;
}
```
使用方法:
1. 将上面的代码保存到一个名为`des.c`的文件中。
2. 在终端中进入到代码所在的目录,并使用以下命令编译代码:
```
gcc des.c -o des -lcrypto
```
3. 运行程序,输入以下命令:
```
./des
```
4. 程序将输出加密和解密结果。
阅读全文