乌班图下基于openssl的密码学实验

最近信息安全的老师布置了一个基于openssl的实验给我们,虽然之前我写过一篇博客,讲的是如何不经过编译直接使用openssl.exe获取ssl证书,不过这次的实验的要求是输入明文,输出经过加密后的密码,所以感觉还是有些内容可以讲,于是就在这里分享给大家。
我选择的平台是乌班图16.04 64位。首先是openssl库的下载、编译。由于liunx自带了openssl,所以我们只需要查看自带的openssl库的版本,并记下它所在的位置,输入openssl version -a,结果如下
这里写图片描述
在输出内容的末尾我们可以看到openssl库所在的位置
接下来安装codeblocks,先进入管理员身份,然后依次进行下面的操作
第一步,安装基本的编译环境
apt-get install build-essential
这里写图片描述
apt-get install gdb
这里写图片描述
第二步,安装codeblocks
apt-get install codeblocks
这里写图片描述
apt-get install codeblocks-dbg
这里写图片描述
接下来,有些教程上有apt-get install wxformbuilder这一步,但又有一些教程上说这一步不是必要的,如果你想要执行这一步的话,直接运行之前的安装代码是没有用的,至少在我这里是这样子的,命令行提示定位不到软件包,
这里写图片描述
所以我就选择去百度wxformbuilder,然后找到了wxformbuilder的github,github上的提示如下
这里写图片描述
可以根据这上面的提示进行操作,不过我在make config=release这一步时,先出现了下面这个错误
这里写图片描述
它提示ticpp.h不存在,这时,我们可以去网上找ticpp.h,之后我也会把它上传到csdn,获得到ticpp.h后,我们把它放到/usr/include和/usr/local/include这两个路径下面,第一个问题就解决了。不过之后又会报一个/usr/local/include/x86_64-linux-gun不是目录的错误,解决这个错误的办法是在对于的目录下新建对应名称的文件夹。不过我到这里就没有继续了,相当于我还是跨过了安装wxformbuilder这步
接下来是安装wxWidgets,这一步中途出来很多的问题,大部分是apt-get找不到教程上的安装包,我老师给我的教程这一步是这样子的
$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

经过我的摸索,直接像下面几张图片上所示进行操作就可以了,我就直接上图了,毕竟,有图有真相
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

接下来就可以打开codeblocks连接openssl了
首先在新建一个空白项目
这里写图片描述
建立完成之后,会在左侧的workspace中看到,这里我对项目命名为openssl
这里写图片描述
右键点击项目,选择build options,之后会出现如示对话框
这里写图片描述
左侧选择Debug,右侧点击Linker settings
这里写图片描述
在Linker settings的左下方点击add
这里写图片描述
在里面输入dl后确定。同样的方式添加ssl,crypto。然后将三个全部选中,点击右下方Copy selected to,选择Release后确定
这里写图片描述
再选择Search directories—>Compiler,点击左下方的Add
这里写图片描述

这里写图片描述
点击右侧的…,这里要选择之前查看openssl版本时看到的openssl路径,然后点击确定。选中之前添加的路径,点击右侧Copy to,如下图,再选择Release然后确定。再点击Search directories –>Linker
这里写图片描述
点击左下方add,分别添加/usr/local/ssl/lib和usr/lib,添加完后全部选中点击右侧下方Copy to …,选择release后确定。在最后确定之后,链接完毕。
接下来,我们在openssl项目上新建一个c文件,点击右上角有加号的按钮
这里写图片描述
选择project,选择files,建立一个c源码文件
这里写图片描述
文件中的代码如下所示

#include <openssl/des.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv)
{
      unsigned char *keystring = "需要加密的内容";
      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[] = "this is a text being encrypted by openssl";
      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;
      for (i = 0; i < len; ++i)
         printf("%02x", output[i]);
      printf("\n");

      memset((char*)&ivec, 0, sizeof(ivec));

      //解密
      DES_cbc_encrypt(output, input, len, &key_schedule, &ivec, 0);

      printf("%s\n", input);

      free(output);
      return EXIT_SUCCESS;
}

点击build & run 如果提示什么路径不存在的话,到对应路径下去新建对应的目录。我遇到的问题是”/usr/local/include/x86_64-linux-gun”
不是一个 目录。这个问题在之前安装wxformbuilder时就遇到过,看了是祸躲不过。。。但/usr/local/下有一个文件也叫include,而且貌似还是一个比较重要的配置文件,如果直接新建一个同名文件夹的话,会报错,所以我的解决方案是先把它隐藏起来,再建立include/x86_64-linux-gun路径就不会有问题了,最后运行结果如示
这里写图片描述
至此,大功告成。
或许上面的步骤看起来很繁琐,实际操作起来也会出现各种各样文章中没有提到的问题,不过遇见问题多多百度总会解决的。如有纰漏或者不清楚的地方欢迎大家在下方评论区中指出,阿里嘎多。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值