zoukankan      html  css  js  c++  java
  • 【2018-2019-1】20165223 实验五 通讯协议设计


    实验成员:20165223

    实验名称:通讯协议设计


    目录


    一、实验目的

    二、实验内容

    二、实验总结


    一、实验目的

    1.了解OpenSSL

    • OpenSSL的简介
      OpenSSL是一个SSL协议的开源工具包,采用C语言作为开发语言,现了安全套接字层(SSL v2/v3)和传输层安全(TLS v1)协议以及全强大的通用加密库,且具备了跨平台的能力,支持Unix/Linux、Windows、Mac OS等多种平台。

    • OpenSSL的组成和功能
      (1)SSL协议库:The SSL Library(SSL、TLS开发代码库)
      (2)密码算法库:The Crypto Library(密码学相关开发代码库)
      (3)应用程序:Command Line Tool(命令行工具,提供CA、证书等功能)

    • 使用 man OpenSSL 命令查看功能


    2.安装和使用OpenSSL

    二、实验内容


    任务一:通讯协议设计-1

    (一)实验要求

    1.在Ubuntu中完成 Linux下OpenSSL的安装与使用 中的作业
    2.提交运行结果截图

    (二)实验步骤

    (1)OpenSSL的安装与测试

    $ tar xzvf openssl-1.1.0-pre1.tar.gz
    

    • 2.安装OpenSSL
    $ cd openssl-1.1.0-pre1
    $ ./config
    

    $ sudo make
    

    $ sudo make install
    

    $ make test    //测试
    

    • 3.编写测试代码 test_openssl.c
    #include <stdio.h>
    #include <openssl/evp.h>
    
    int main(){
        
        OpenSSL_add_all_algorithms();
        
        return 0;
    }
    
    
    • 4.使用OpenSSL密码算法库编译运行
    //编译
    $ gcc -o test_openssl test_openssl.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
    
    //运行,打印0
    $ echo $?
    
    

    注意要加上 -lssl 链接OpenSSL密码算法库,否则会报错

    (2)Linux下OpenSSL的安装与使用中的作业

    1.基于Socket实现TCP通信,实现服务器与客户端
    2.研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5
    3.选用合适的算法,基于混合密码系统实现对TCP通信进行机密性、完整性保护。
    4.学有余力者,对系统进行安全性分析和改进。

    首先了解一下OpenSSL算法的指令内容(man openssl)

    • 对称算法
    使用的标准命令为 enc
    openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
       [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
       [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
    
    -in filename:指定要加密的文件存放路径
    
    -out filename:指定加密后的文件存放路径
    
    -salt:自动插入一个随机数作为文件内容加密,默认选项
    
    -e:可以指明一种加密算法,若不指的话将使用默认加密算法
    
    -d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致
    
    -a/-base64:使用-base64位编码格式
    
    • AES
    openssl enc -aes-128-cbc -in plain.txt -out out.txt -pass pass:123456 //密码123456
    
    • RSA
    openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
       [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]
    常用选项:
    
    -in filename:指明私钥文件
    
    -out filename:指明将提取出的公钥保存至指定文件中 
    
    -pubout:根据私钥提取出公钥
    
    • MD5
    openssl passwd -1 -in test.txt -salt 12345678    
    
    生成密码需要使用的标准命令为 passwd ,用法如下:
    
    openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
    常用选项有:
    
    -1:使用md5加密算法
    
    -salt string:加入随机数,最多8位随机数
    
    -in file:对输入的文件内容进行加密
    
    -stdion:对标准输入的内容进行加密
    

    再实现作业中的内容

    • 1.基于Socket实现TCP通信

    • 2.使用OpenSSL算法,测试对称算法AES

    • 3.使用OpenSSL算法,测试非对称算法RSA(生成私钥→生成公钥→加密→解密)
    /*生成RSA密钥*/
    
    $ openssl genrsa -des3 -passout pass:123456 -out RSA.pem 
    
    /*提取公钥*/
    $ openssl rsa -in RSA.pem -passin pass:123456 -pubout -out pub.pem 
    
    /*使用RSA作为密钥进行加密,实际上使用其中的公钥进行加密*/
    
    $ openssl rsautl -encrypt -in plain.txt -inkey RSA.pem -passin pass:123456 -out enc.txt
    
    /*使用RSA作为密钥进行解密,实际上使用其中的私钥进行解密*/
    
    $ openssl rsautl -decrypt -in enc.txt -inkey RSA.pem -passin pass:123456 -out replain.txt
    
    /*比较原始文件和解密后文件*/
    
    $ diff plain.txt replain.txt 
    
    /*使用公钥进行加密*/
    
    $ openssl rsautl -encrypt -in plain.txt -inkey pub.pem -pubin -out enc1.txt
    
    /*使用RSA作为密钥进行解密,实际上使用其中的私钥进行解密*/
    
    $ openssl rsautl -decrypt -in enc1.txt -inkey RSA.pem -passin pass:123456 -out replain1.txt
    
    /*比较原始文件和解密后文件*/
    
    $ diff plain.txt replain1.txt
    
    

    • 4.使用OpenSSL算法,测试Hash算法中的MD5(使用MD5加密“20165223cn”)

    (三)实验结果

    • 编译运行测试代码:test_openssl.c

    (四)代码分析

    返回目录


    任务二:通讯协议设计-2

    (一)实验要求

    1.在Ubuntu中实现对实验二中的“wc服务器”通过混合密码系统进行防护
    2.提交测试截图

    (二)实验步骤

    • 1.编写客户端和服务器代码

    • 2.编译客户端和服务器代码

    $ gcc -o server server.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
    $ gcc -o telent telent.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
    
    

    • 3.产生私钥
    $ openssl genrsa -out privkey.pem 1024
    

    • 4.生成证书(需要填写信息)
    $ openssl req -new -x509 -key privkey.pem -out CAcert.pem -days 1095
    

    • 5.运行实现对实验二中的“wc服务器”通过混合密码系统进行防护
    $ ./server 8888 1 CAcert.pem privkey.pem
    $ ./telent 127.0.0.1 8888
    

    (三)实验结果

    • 实现对实验二中的“wc服务器”通过混合密码系统进行防护

    (四)代码分析

    返回目录


    二、实验总结


    (一)遇到的问题

    在编译测试代码的时候报错如下

    • 原因:没有加上-lssl来链接OpenSSL的密码算法库
    • 解决:在编译命令上加上-lssl即可
    $ gcc -o to test_openssl.c -I /usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto -ldl -lpthread
    
    

    (二)分析与总结

    (1)实验心得

    • 这次的实验让我了解了OpenSSL的功能与基本使用方法,学会了通过OpenSSL来测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5等,掌握了许多新的知识。

    (2)OpenSSL知识点总结

    OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。

    • OpenSSL的基本功能

      • 密码算法库
      • SSL协议库
      • 应用程序
    • OpenSSL实现对称加密
      OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。

    • OpenSSL实现非对称加密
      OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。

    • OpenSSL的应用程序功能
      OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的,提供了相对全面的功能。OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其它辅助配置功能。

    (三)参考资料

    1. Linux下OpenSSL的安装与使用
    2. SSL编程- 简单函数介绍
    3. OpenSSL证书操作
    4. Linux下的OpenSSL编程——openssl例子

    返回目录

  • 相关阅读:
    【原创】贴片电容的测量方法。。。这是我从自己QQ空间转过来的,本人实操!
    CentOS6.4安装Apache+MySQL+PHP
    第一次在博客园写博客。。。新人
    C# 简单生成双色球代码
    从客户端中检测到有潜在危险的 Request.Form 值 方法
    经典实例
    js鼠标键禁用功能
    逻辑思维题
    C#运算符笔记
    C#基础
  • 原文地址:https://www.cnblogs.com/moddy13162201/p/10126100.html
Copyright © 2011-2022 走看看