乌班图下基于openssl的密码学实验
发布日期:2021-05-07 10:15:40 浏览次数:20 分类:精选文章

本文共 3166 字,大约阅读时间需要 10 分钟。

Ubuntu 16.04 上配置 OpenSSL 环境并使用 CodeBlocks 开发加密应用

作为一名学习信息安全的学生,我最近接触了一个基于 OpenSSL 的实验项目。虽然之前我写过一篇关于如何直接使用 OpenSSL.exe 获取 SSL 证书的博客,但这次的实验要求更高一些:需要输入明文,输出加密后的密码。因此,我决定详细记录整个配置过程,并分享给有兴趣的同学们。


一、实验环境搭建

1. 系统环境

我选择使用 Ubuntu 16.04 64 位系统。这是因为 Ubuntu 的稳定性和丰富的包仓库非常适合开发环境搭建。


2. 安装必要的开发工具

在开始之前,需要确保系统中有足够的开发环境工具。我按照以下步骤进行安装:

sudo apt-get install build-essential
sudo apt-get install gdb
sudo apt-get install codeblocks
sudo apt-get install codeblocks-dbg

安装完成后,CodeBlocks 会自动启动。如果不需要 immediately,可以通过 codeblocks 命令启动。


3. 安装 wxWidgets

为了支持 OpenSSL 的 GUI 开发,需要先安装 wxWidgets 库。按照以下命令安装:

sudo apt-get install libwxbase2.8
sudo apt-get install libwxbase2.8-dev
sudo apt-get install libwxgtk2.8-0
sudo apt-get install libwxgtk2.8-dev
sudo apt-get install libwxgtk2.8-dbg
sudo apt-get install wx-common
sudo apt-get install wx2.8-headers
sudo apt-get install wx2.8-i18n

安装完成后,记得重启终端以确保环境变量生效。


二、配置 OpenSSL 开发环境

1. 安装 OpenSSL

由于 Ubuntu 自带的 OpenSSL 版本较旧,我需要手动安装最新版本。按照以下命令操作:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install libssl-dev

安装完成后,检查 OpenSSL 版本:

openssl version -a

2. 配置 CodeBlocks 的开发环境

在 CodeBlocks 中,新建一个空白项目并命名为 openssl。右键单击项目,选择 Build Options,然后在 Search directories 中添加以下路径:

  • Compiler Directory/usr/local/ssl/lib
  • Linker Directory/usr/local/ssl/lib/usr/lib

Linker Settings 中添加以下库:

  • dl
  • ssl
  • crypto

将所有选中的库复制到 Release 版本中。


三、编写加密应用程序

1. 新建 C 文件

在 CodeBlocks 中创建一个新的 C 文件,代码如下:

#include 
#include
#include
int main(int argc, char** argv) {
unsigned char *keystring = "your_password_here";
DES_cblock key;
DES_key_schedule key_schedule;
// 生成密钥
if (DES_string_to_key(keystring, &key) != 0) {
printf("Failed to convert keystring to key.\n");
return -1;
}
// 加密明文
unsigned char input[] = "明文需要加密";
size_t len = (sizeof(input) + 7) / 8 * 8;
unsigned char *output = malloc(len + 1);
DES_cblock ivec;
memset((char*)&ivec, 0, sizeof(ivec));
if (DES_cbc_encrypt(input, output, sizeof(input), &key_schedule, &ivec, DES_ENCRYPT) != 0) {
printf("Failed to encrypt data.\n");
return -1;
}
// 输出加密结果
printf("加密结果:");
for (int i = 0; i < len; i++) {
printf("%02x", output[i]);
}
printf("\n");
// 解密过程
memset((char*)&ivec, 0, sizeof(ivec));
if (DES_cbc_encrypt(output, input, len, &key_schedule, &ivec, 0) != 0) {
printf("Failed to decrypt data.\n");
return -1;
}
printf("解密结果:%s\n", input);
free(output);
return 0;
}

四、编译与运行

1. 运行 Build Options

在 CodeBlocks 中,右键单击项目,选择 Build Options,确保以下设置:

  • 搜索目录:添加 usr/local/ssl/libusr/lib
  • 链接器选项:添加 usr/local/ssl/libusr/lib

将所有选中的库复制到 Release 版本中。


2. 编译项目

在 CodeBlocks 中,右键单击项目,选择 Build & Run。如果提示路径不存在,按照提示在对应路径下新建相应的目录。


五、测试与验证

1. 输入明文

运行程序时,输入明文:

./openssl_project 
<明文>

2. 查看加密结果

程序会输出加密后的十六进制字符串。将其解密后可以验证是否还原了明文。


六、遇到的问题与解决方案

  • ticpp.h 不存在:这是因为 wxWidgets 的安装可能出现了问题。请确保 wxWidgets 的安装步骤正确无误。
  • 路径错误:如果提示 /usr/local/include/x86_64-linux-gun 不是一个目录,可以尝试隐藏该目录并重新创建。

  • 七、总结

    通过以上步骤,我们成功配置好了 Ubuntu 16.04 系统中的 OpenSSL 开发环境,并通过 CodeBlocks 编写并运行了一个简单的加密应用程序。虽然过程中遇到了不少问题,但通过查阅资料和实验,最终都能迎刃而解。如果有任何疑问或遇到问题,请随时留言,我会尽力帮助你!

    上一篇:JavaScript二叉查找树删除节点的实现原理
    下一篇:MongoDB地理位置索引

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年03月26日 22时30分07秒