OpenSSL 本身是一个软件库,这个软件被广泛的应用在系统服务器当中,他的主要功能是在网络通信的过程中,保证数据的一致性以及数据传输过程中的安全性。软件本身是由C语言编写,这使得他具备了跨平台的特性,OpenSSL 主要包括如下三大功能:

  • 加解密: OpenSSL 具有丰富的加解密算法库,支持不同的加解密方式以及存储秘钥的方式,如对称加密,非对称加密,信息摘要等内容

  • SSL 协议: OpenSSL 实现了 SSL 协议的的 SSLv2 和 SSLv3,支持了其中绝大部分算法协议

  • 证书操作: OpenSSL 自身提供了一种文本数据库,支持证书的管理功能,包括证书秘钥的产生、请求产生、证书签发、吊销和验证等功能。

加解密的几种形式

加解密的形式通常分为以下几种:

  • 对称加密算法

  • 非对称加密算法

  • 不可逆加密算法

  • 下面我们挨个来看这些加密算法。

对称算法

对称算法是指信息的发送方和接收方使用同一份秘钥去加解密数据。AES、DES 等都是常用的对称加密算法。

对称算法的优点是加解密的速度快,适合对于大数据量加密。缺点是因为只有一个秘钥,所以秘钥管理困难,只要暴露了,就很容易破解加密后的信息。

非对称算法

非对称算法是指信息的发送方和接收方分别持有一份秘钥。一份公开发布,称公钥;一份私有,称秘钥。秘钥可以导出对应的公钥。RSA、DSA 等是常用的非对称加密算法。

一般情况下,信息发送者用公开密钥去加密,而信息接收者则用私用密钥去解密。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。不同的使用场景下,也会衍生出其他的使用方法,比如私钥加密,公钥解密。

RSA 加解密算法

RSA 是一个流行的非对称加密算法, 生成公私钥内容如下:

# 生成秘钥
OpenSSL genrsa -out test.key 1024
# 从秘钥中导出公钥
OpenSSL rsa -in test.key -pubout -out test_pub.key
# 公钥加密文件
echo "test" > hello
OpenSSL rsautl -encrypt -in hello -inkey test_pub.key -pubin -out hello.en
# 私钥解密文件
OpenSSL rsautl -decrypt -in hello.en -inkey test.key -out hello.de

不可逆加密算法

不可逆加密算法主要用于校验文件的一致性,摘要算法就是其中一种。常用的摘要算法有 MD5。

摘要算法

摘要算法用来把任何长度的明文以一定规则变成固定长度的一串字符。在做文件一致性校验的时候,我们通常都是先使用摘要算法,获得固定长度的一串字符,然后对这串字符进行签名。接收者接收到文件后,也会执行一遍摘要算法后再签名。前后数据一致,则表示文件在传输过程没有被窜改。

base64

特别需要注意的是,base64 不是加密算法,它是编码方式。 它可以方便传输过程 ASCII 码和二进制码之间的转换。类似于图片或者一些文本协议,在传输过程中通常可以使用 base64 转换成二进制码进程传输。

SSH 加密流程

  • 客户端发送自己的密钥 ID 给服务器端

  • 服务器在自己的 authorized_keys 文件中查找是否存在此 ID 的公钥

  • 如果有,则服务器生成一个随机数,用当前 ID 的公钥加密

  • 服务器将加密后的随机数发给客户端

  • 客户端用私钥解密该随机数,然后在本地为随机数做 MD5 加密

  • 客户端将该 MD5 哈希发给服务器端

  • 服务器端为一开始自己生成的随机数也做一个 MD5 哈希,然后用通讯通道“公共的密钥”将该哈希加密,再跟客户端发来的内容进行对比。如果双方内容一致,则通过验证,开放访问权限给客户端

深入了解 OpenSSL 后,其对密码学技术的功能支持会让你激动不已,如果有兴趣可以更加深入地了解其中的内容以及试验不同加密方式在不同场景中的使用。放个小预告: 后续还会推出一篇用 pyo3 来给 python 编写 rsa 正反向加解密模块的文章。

灵魂画手:漫画图解 SSH相关推荐

  1. 灵魂画手图解Spring循环依赖

    目录 spring源码目录 git注释项目地址:https://github.com/chaitou/spring-framework-master.git 前言 想彻底弄清楚spring的循环依赖问 ...

  2. 讲解开源项目:让你成为灵魂画手的 JS 引擎:Zdog

    本文作者:HelloGitHub-kalifun HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  3. 超1亿人次嗨玩猜画夺宝 AI助灵魂画手智抢红包

    从远古时期开始,人类就已经学会了用简单的涂鸦去描绘自己看到的世界,而到了今天,涂鸦或者更准确的说是简笔画,可能是唯一的全人类通用的绘画技能.如果给你一张纸和一支笔,请你画出一双大眼睛,美术生画出来的可 ...

  4. matlab绘图画八卦,我这里有十条画图秘籍,让你不再「灵魂画手」

    原标题:我这里有十条画图秘籍,让你不再「灵魂画手」 本文由微信公众号"科研圈"(ID: keyanquan) 授权转载 转载请先联系keyanquan@huanqiukexue.c ...

  5. 80道漫画图解算法题汇总(0406版本)

    各位好,本人自2019年1月以来,连续写了80余篇算法题解(主要针对高频面试题),都采用漫画图解的方式,为了大家查阅方便,我对目录进行了汇总,大家有兴趣的可以收藏一下,以备不时之需.(另外,为了感谢大 ...

  6. 漫画图解python_80道漫画图解算法题汇总

    本文每个链接采用漫画图解的方式,为了大家查阅方便,对目录进行了汇总,大家有兴趣的可以收藏一下,以备不时之需. 01 PART 二分法系列 介绍:二分法自不必说,是面试以及比赛的高频考点,必须掌握. 0 ...

  7. 拯救灵魂画手!Google新推AutoDraw,用机器学习帮你画画

    本文来自AI新媒体量子位(QbitAI) 想画好和能画好之间,有一条巨大的鸿沟.以致于很多有着天马行空想法的文艺青少年/中老年,都变成了灵魂画手. 不管这是不是一个痛点,现在Google出手了-- 这 ...

  8. AI让我离灵魂画手只差个灵魂了

    AI让我离灵魂画手只差个灵魂了 废寝忘食的折腾了好几天,终于把绘画AI(SD)部署好了,在仓库吃了一年灰的ThinkPadX1终于也重见天日了.本地化部署Stable Diffusion,其实难度不大 ...

  9. HTTP与HTTPS(自制漫画图解)

    HTTP与HTTPS的故事(别急着走,往下看!) 什么是HTTP HTTP 简介 HTTP工作原理 图解HTTP 为什么要有HTTPS 很久很久以前(自制漫画图解) 传统HTTP在网络通信中存在的问题 ...

最新文章

  1. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源
  2. 六层感知神经网络系统
  3. 如何设计Lighthoused定位接收电路
  4. 10.7抛出异常处理
  5. MFC中CStatic控件动态改变
  6. C#——《C#语言程序设计》实验报告——数据库编程——基于ADO.NET技术的数据库操作DEMO
  7. 零基础学习WinCE开发
  8. 学习笔记【2010/09/20-2010/11/27】
  9. 怎么把空字符串去掉_Python知识点字符串转整数需注意
  10. 编译器入门 语法分析器 java_从零开始写个编译器吧 - Parser 语法分析器
  11. EIGRP的基本配置
  12. C# log4net纯代码设置参数
  13. NE40E面板ALM报警亮灯
  14. 高等代数 北大版 Page 17 推论 证明
  15. oracle删库语句,oracle删除表语句是什么?_数据库
  16. ssm+微信小程序基于小程序的医院预约挂号系统毕业设计源码260839
  17. Tracup已证明,高效敏捷的沟通与协作可提升IT生产力
  18. BZOJ[1135][POI2009]Lyz 线段树
  19. 基于星环TDH数据仓库典型总和场景数据流转设计
  20. springboot毕设项目社区健康服务系统h9bpy(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. Response_案例1_路径_相对路径
  2. 分析时间复杂度和空间复杂度(一级)
  3. 添加元素的注意问题 复习 介绍 元素的创建 元素添加的方法 元素移除的方法
  4. xxl-job 2.1.1执行器源码解读
  5. 深入理解Kafka(3)-Consumer
  6. java 正则 多个空格_java正则表达式 多个空格替换多个成-
  7. WebSocket 的通信机制
  8. 基于 DataLakeAnalytics 做跨地域的数据分析 1
  9. 腾讯微博发表带图片的微博
  10. python交互模式设置及VIM的tab补齐