基于OpenSSL库的加解密实验
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;
}
运行截图,则实验完成,
推荐阅读
-
基于node简单实现RSA加解密的方法步骤
-
php基于session实现数据库交互的类实例
-
基于Docker的PHP调用基于Docker的Mysql数据库
-
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
-
基于B-树和B+树的使用:数据搜索和数据库索引的详细介绍
-
浅谈基于Canvas的手绘风格图形库Rough.js
-
PHP封装的数据库模型Model类完整示例【基于PDO】
-
基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作
-
基于Python的SQL Server数据库实现对象同步轻量级
-
C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法