openssl实验总结

OPENSSL简介

OpenSSL项目是一个协作开发一个健壮的,商业级的,全功能的,并且开放源代码工具包,它实现了安全套接字层(SSL v2/v3)和传输层安全(TLS v1)协议以及全强大的通用加密库。

OPENSSL由3部分组成:

  1. The SSL library(SSL、TLS开发代码库)
  2. the Crypto library(密码学相关开发代码库)
  3. command line tool(命令行工具,提供CA、证书等功能)

关于安装

一般的linux会自带openssl,但是想要编程的话需要安装一个libssl-dev的软件包,原因是,虽然系统一般会自带openssl但是在bin文件夹下还有usr/include文件夹下一般都没有openssl的各种.h头文件,所以需要安装软件包来进行头文件的补全。

接下来会讲解命令行下的openssl的使用

1、消息摘要算法应用例子 (sha1 md5 base64等算法均可 在下方替换即可)

​ 用SHA1算法计算文件file.txt的哈西值,输出到stdout:

openssl dgst -sha1 file.txt

​ 用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt:

openssl sha1 -out digest.txt file.txt

​ 用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin。签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中。

openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt

​ 用dss1算法验证file.txt的数字签名dsasign.bin,验证的private key为DSA算法产生的文件dsakey.pem。

openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt

​ 用sha1算法为文件file.txt签名,输出到文件rsasign.bin,签名的private key为RSA算法产生的文件rsaprivate.pem。

openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt

​ # 用sha1算法验证file.txt的数字签名rsasign.bin,验证的public key为RSA算法生成的rsapublic.pem。

openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt

2、对称加密应用例子

​ 对称加密应用例子,用DES3算法的CBC模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。

openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin

​ 用DES3算法的OFB模式解密文件ciphertext.bin,提供的口令为trousers,输出到文件plaintext.doc。注意:因为模式不同,该命令不能对以上的文件进行解密。

openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers

​ 用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取,输出到文件ciphertext.bin。

openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD

​ 给文件ciphertext.bin用base64编码,输出到文件base64.txt。

openssl base64 -in ciphertext.bin -out base64.txt

​ 用RC5算法的CBC模式加密文件plaintext.doc,输出到文件ciphertext.bin,salt、key和初始化向量(iv)在命令行指定。

openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29

3、Diffie-Hellman应用例子

​ 使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数,输出保存到文件dhparam.pem

openssl dhparam -out dhparam.pem -2 1024

​ 从dhparam.pem中读取Diffie-Hell参数,以C代码的形式,输出到stdout。

openssl dhparam -in dhparam.pem -noout -C

4、DSA应用例子应用例子

​ 生成1024位DSA参数集,并输出到文件dsaparam.pem。

openssl dsaparam -out dsaparam.pem 1024

​ 使用参数文件dsaparam.pem生成DSA私钥匙,采用3DES加密后输出到文件dsaprivatekey.pem

openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem

​ 使用私钥匙dsaprivatekey.pem生成公钥匙,输出到dsapublickey.pem

openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem

​ 从dsaprivatekey.pem中读取私钥匙,解密并输入新口令进行加密,然后写回文件dsaprivatekey.pem

openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin

5、RSA应用例子

​ 产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem

openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024

​ 从文件rsaprivatekey.pem读取私匙,用口令trousers解密,生成的公钥匙输出到文件rsapublickey.pem

openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem

​ 用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt

openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt

​ 使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt

openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt

​ 用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin

openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin

​ 用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt

openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain

​ 从X.509证书文件cert.pem中获取公钥匙,用3DES加密mail.txt,输出到文件mail.enc

openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem

​ 从X.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密S/MIME消息mail.enc,结果输出到文件mail.txt

openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt

​ cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,证书被包含在S/MIME消息中,输出到文件mail.sgn

openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn

​ 验证S/MIME消息mail.sgn,输出到文件mail.txt,签名者的证书应该作为S/MIME消息的一部分包含在mail.sgn中

openssl smime -verify -in mail.sgn -out mail.txt

接下来说明编程实例,这里举两个例子,分别是md5算法和rsa密码加密算法

md5:

引用库

​ openssl/md5.h

主要函数

​ int MD5Init(MD5CTX *c);

​ 初始化md5上下文结构

​ int MD5Update(MD5CTX c, const void data, size_t len);

​ 刷新MD5,将文件连续数据分片放入进行MD5刷新

​ int MD5Final(unsigned char md, MD5CTX c);int MD5Init(MD5CTX *c);

​ 产生最终的md5数据

​ unsigned char MD5(const unsigned char d, size_t n, unsigned char *md);

​ 直接产生字符串的MD5

实验代码:

include

include

include

include <openssl/md5.h>

int main(int argc, char** argv)

{

​ MD5_CTX hash_ctx;

​ char input_string[128];

​ unsigned char hash_ret[16];

​ int i;

​ if (argc != 2)

​ {

​ fprintf(stderr, "%s \n", argv[0]);

​ exit(-1);

​ }

​ snprintf(input_string, sizeof(input_string), "%s\n", argv[1]);

t

​ MD5_Init(&hash_ctx);

)

​ MD5_Update(&hash_ctx, input_string, strlen(input_string));

​ MD5_Final(hash_ret, &hash_ctx);

​ printf("Input string: %s", input_string);

​ printf("Output string: ");

​ for (i=0; i<32; ++i)

​ {

​ if (i % 2 == 0)

​ {

​ printf("%x", (hash_ret[i/2] >> 4) &0xf);

​ }

​ else

​ {

​ printf("%x", (hash_ret[i/2]) &0xf);

​ }

​ }

​ printf("\n");

​ return 0;

}

运行指令为

​ gcc -Wall md5.c -o md5 -lssl

结果测试

接下来说明rsa编程:

​ RSA是一个非对称加密算法。简单说来,非对称加密算法就是说加密解密一个文件需要有两个密钥,一个用来加密,为公钥,一个用来解密,为私钥。证书可以用来授权公钥的使用。

首先来说明一下命令行下的相关指令:

在openssl中密钥一般采用.pem格式

1.openssl genrsa -des3 -out prikey.pem 1024 #生成rsa密钥

Enter pass phrase for prikey.pem: xxx

Verifying - Enter pass phrase for prikey.pem: xxx

2.openssl rsa -in prikey.pem -out prikey.pem #去除掉密钥文件保护密码

输入提取密码(和刚才输入的一致):Enter pass phrase for prikey.pem: xxx

writing RSA key.

3.openssl rsa -in prikey.pem -pubout -out pubkey.pem #分离出公钥

writing RSA key.

4.openssl asn1parse -out temp.ans -i -inform PEM < prikey.pem #提取十六进制密钥

所需头文件:

include<openssl/rsa.h>

include<openssl/pem.h>

include<openssl/err.h>

编译所需指令:gcc -Wall -O2 -o rsa rsa.c -lcrypto -lssl

编程思想:

首先引用三个openssl中关于rsa以及.pem密钥的头文件,之后定义主函数,src字符串为hello openssl_rsa,加密解密的字符串暂时为空。之后引用两个函数my-encrypt与my_decrypt,之后进行输出,如果为空则释放字符串return 0即可。接下来将解两种之前定义过的方法,之前先用命令行创建公钥和私钥.pem文件,之后在开始对它们分别define为prikey和pubkey。之后在方法中引用原始字符串以及密钥(注意是长度为1024)。之后对其进行引用RSA_public_encrypt(rsa_len,(unsigned char )str,(unsigned char )en,rsa,RSA_NO_PADDING)函数为真即输出。

编程结果:

openssl实践总结的更多相关文章

  1. openssl_final学习总结

    openssl学习总结 openssl知识点总结 openssl实践总结 简介 openssl是一个功能丰富且自包含的开源安全工具箱.它提供的主要功能有: SSL协议实现(包括SSLv2.SSLv3和 ...

  2. OpenSSl 加密解密 示例(终于有编程实践了)

    OPenSSl的加密主要有三个重要的函数.看懂下面的代码就基本上知道该如何使用openssL来加密了. 不过注意,要先将libssl.so.1.0和libcrypto.so.1.0文件复制到执行的文件 ...

  3. 非对称加密openssl协议在php7实践

    据网上资料,RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商务中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(RON RIVEST).阿迪·萨莫尔(ADI SHAMIR)和伦纳德· ...

  4. Linux服务器,PHP的10大安全配置实践

    PHP被广泛用于各种Web开发.而当服务器端脚本配置错误时会出现各种问题.现今,大部分Web服务器是基于Linux环境下运行(比如:Ubuntu,Debian等).本文例举了十大PHP最佳安全实践方式 ...

  5. 《开源安全运维平台OSSIM最佳实践》

    <开源安全运维平台OSSIM最佳实践> 经多年潜心研究开源技术,历时三年创作的<开源安全运维平台OSSIM最佳实践>一书即将出版.该书用80多万字记录了,作者10多年的IT行业 ...

  6. 关于openssl几个API的一点小收获

    今天心血来潮突然想搞搞openssl了,趁着端午小假,刚好有空可以鼓捣孤岛自己喜欢的东西,出去东奔西跑的实在太造孽了,还是宅起来给自己充充电吧.下载openssl最新代码1.0.1g,修复了" ...

  7. [原]在win上编译 subversion 源码实践Tonyfield的专栏

    (百度和网页的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。) [原]在win上编译 subversion 源码实践 2013-6-9阅读400 评论0 (参考 ...

  8. 《深入理解Nginx》阅读与实践(一):Nginx安装配置与HelloWorld

    最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码的能力,二是想学学Nginx优秀的架构设计,三是想找一个点深入下Linux下网络编程的细节.侯 ...

  9. apache服务器配置Net的实践

    前置: 在xp系统中,打补丁之类或啥子操作引起或多或少的问题,最终导致iis不能使用: 不想装系统...忍着... 最近突发事件导致,需要摸一下apache服务器处理,好吧,那就搜索下吧..... 目 ...

随机推荐

  1. MongoDB学习笔记——数据库安装及配置

    MongoDB数据库安装 MongoDB官方下载地址:https://www.mongodb.com/download-center 首先需要根据Windows版本选择正确的MongoDB版本进行安装 ...

  2. 【php】mysql全局ID生成方案

    生产系统随着业务增长总会经历一个业务量由小变大的过程,可扩展性是考量数据库系统高可用性的一个重要指标;在单表/数据库数据量过大,更新量不断飙涨时,MySQL DBA往往会对业务系统提出sharding ...

  3. GDI学习之俄罗斯方块

    做个玩玩 public Form1() { InitializeComponent(); } #region 定义砖块int[i,j,y,x] Tricks:i为那块砖,j为状态,y为列,x为行 pr ...

  4. Apache CXF自定义拦截器

    为什么设计拦截器?1.为了在webservice请求过程中,能动态操作请求和响应数据,CXF设计了拦截器 拦截器分类: 1.按所处的位置分:服务器端拦截器,客户端拦截器. 2.按消息的方向分:入拦截器 ...

  5. POI教程之第一讲:创建新工作簿, Sheet 页,创建单元格

    第一讲 Poi 简介 Apache POI 是Apache 软件基金会的开放源码函数库,Poi提供API给java程序对Microsoft Office格式档案读和写的功能. 1.创建新工作簿,并给工 ...

  6. Linux系统升级更新openssh 7.3p1

    放在最前面:鉴于网上爬虫猖獗,博客被盗时有发生,这里需要来个链接,大家请认准来自博客园的Scoter:http://www.cnblogs.com/scoter2008,本文将持续更新 最近绿盟给扫描 ...

  7. poj 3177 Redundant Paths

    题目链接:http://poj.org/problem?id=3177 边双连通问题,与点双连通还是有区别的!!! 题意是给你一个图(本来是连通的),问你需要加多少边,使任意两点间,都有两条边不重复的 ...

  8. kvm解决1000M网卡问题

    1.当我们安装完虚拟机, 发现虚拟机竟然是 100M 网络, 传输速率很低, 那是怎么导致的呢,如何来解决呢? 需要我们修改 vm01.xml 配置文件网卡段,添加如下红色标记行,改 为 e1000, ...

  9. Hive Word count

    --https://github.com/slimandslam/pig-hive-wordcount/blob/master/wordcount.hql DROP TABLE myinput; DR ...

  10. 为TFS配置跨平台的生成服务器Xplat (Ubuntu Linux)

    1. 概述 从TFS 2015开始,微软开始支持跨平台的构建代理.你可以使用TFS的Xplat代理,方便的在基于IOS, Unix和Linux的服务器上搭建生成代理,实现构建.发布等功能.本文档已Ub ...