基于OpenSSL库的加解密实验

来源:互联网 发布:淘宝店怎么去推广 编辑:程序博客网 时间:2024/06/06 01:11

Openssl库的下载、编译和配置过程,
程序内容要求:基于openssl库实现对称密码算法des/aes的加解密操作(注意分组密码的工作方式)和非对称密码rsa的加解密操作。明文请选择自己的学号+姓名。程序的输出结果包括:输入的明文,加密后生成密文输出,解密结果再次输出。

操作环境:windows7+minGW+codeblocks

一. 下载并安装MinGW - 20120426.exe

1.下载MinGW - 20120426.exe
百度直接搜索“mingw-get-inst-20120426.exe”

2.安装MinGW - 20120426.exe
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

安装成功

这里写图片描述

3)配置MinGW的环境变量

这里写图片描述
这里写图片描述
这里写图片描述

二、安装OpenSSL库

1、下载
百度搜索“openssl-1.0.0e.tar.gz”,下载后直接解压。

2、安装OpenSSL-1.0.0e
1)打开D/MinGW/msys/1.0/msys.dat文件,输入以下命令,发现,Perl 5不存在,故接下来安装Perl 5
这里写图片描述
3、安装Perl 5
1)下载Perl 5
这里写图片描述
这里写图片描述

2)安装Perl 5

这里写图片描述
这里写图片描述
这里写图片描述
安装完成。

3)重新打开D/MinGW/msys/1.0/msys.dat文件,输入以下命令。
这里写图片描述

以下图片说明安装完成,继续进行下面的操作。这里写图片描述

4、进行进一步操作
1)输入命令$ make,出现以下图片说明成功
这里写图片描述

2)输入命令$ make install,则OpenSSL-1.0.0e编译完成
这里写图片描述

三、codeblocks(这里就不叙述codeblocks的安装过程)上基于openssl库的编程
1)打开codeblocks,Setting-complier-Toolchain executables,修改MinGW路径:
这里写图片描述
添加头文件:
这里写图片描述

添加链接库路径和链接程序路径:
这里写图片描述

四、实验结果输出截图
1、运行以下代码(des2.c):

#include <openssl/des.h>#include <stdio.h>#include <string.h>int main(int argc, char** argv){      unsigned char *keystring = "this is my key";      DES_cblock key;      DES_key_schedule key_schedule;#if 1      //生成一个 key      DES_string_to_key(keystring, &key);      if (DES_set_key_checked(&key, &key_schedule) != 0) {          printf("convert to key_schedule failed.\n");          return -1;      }#else      //生成一个key,但不检查key      memcpy(key, "password", 8);      DES_set_key_unchecked(&key, &key_schedule);#endif      //需要加密的字符串      unsigned char input[] = "姓名2015011111";      printf("明文:");      printf("%s\n",input);     // printf("\n");      //输出要加密的原文      size_t len = (sizeof(input)+7)/8 * 8;      unsigned char *output = malloc(len+1);      //IV      DES_cblock ivec;      //IV设置为0x0000000000000000      memset((char*)&ivec, 0, sizeof(ivec));      //加密      DES_cbc_encrypt(input, output, sizeof(input), &key_schedule, &ivec, DES_ENCRYPT);      //输出加密以后的内容      int i;      printf("密码:");      for (i = 0; i < len; ++i)         printf("%02x", output[i]);      printf("\n");     // printf("\n");      memset((char*)&ivec, 0, sizeof(ivec));      //解密      DES_cbc_encrypt(output, input, len, &key_schedule, &ivec, 0);      //输出解密后的文字      printf("解密后:");      printf("%s\n", input);      free(output);      return EXIT_SUCCESS;}

运行截图,则实验完成,

原创粉丝点击