惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
爱范儿
爱范儿
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
Latest news
Latest news
The Hacker News
The Hacker News
Cyberwarzone
Cyberwarzone
博客园 - 【当耐特】
Project Zero
Project Zero
小众软件
小众软件
T
Tailwind CSS Blog
量子位
博客园 - 聂微东
I
Intezer
美团技术团队
S
SegmentFault 最新的问题
T
Tor Project blog
Spread Privacy
Spread Privacy
V
Vulnerabilities – Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Jina AI
Jina AI
罗磊的独立博客
B
Blog RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
C
Cisco Blogs
L
LINUX DO - 热门话题
Last Week in AI
Last Week in AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Azure Blog
Microsoft Azure Blog
L
LINUX DO - 最新话题
Know Your Adversary
Know Your Adversary
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
Lohrmann on Cybersecurity
The Register - Security
The Register - Security
L
LangChain Blog
博客园 - 叶小钗
T
Tenable Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 大白话 | Java初学指♂男:“说说初学的误区与死结”( 壹 | 反射与Field ) - 技术改变视野 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解! - 技术改变视野 🎨 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 - 技术改变视野 我在 GitHub 上的开源项目 - 技术改变视野 为IDEA/Git配置GPG密钥,点亮GitHub Verified Commit标识 - 技术改变视野 从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf - 技术改变视野 无题 - 技术改变视野 年轻人的第一辆京牌电动车 - 技术改变视野 我们忙碌且漫长的一生,有多久是为自己而活? - 技术改变视野 一个最简单的实例理解Semaphore在Java中的作用 - 技术改变视野 说说《后浪》 - 技术改变视野 离线使用 Google Fonts:让你的网站更精致 | goofoffline 神器,一键下载生成离线字体库! - 技术改变视野 实例带你学会简单的Java Thread多线程 - 技术改变视野 一个实例理解Java的接口(interface)用处与用法 - 技术改变视野 一个实例带你理解JavaBean - 技术改变视野 WebFilter-SpringBoot过滤器注解实例讲解 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用 - 技术改变视野 实例带你获取多线程Thread的返回值之 (壹) - Callable的运行 - 技术改变视野 实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据 - 技术改变视野 一个实例理解Java Runnable多线程用处与用法 - 技术改变视野 从零开始 OpenSSL 之 (贰) - 使用 rsautl 解密文件 - 技术改变视野 大白话之Docker(壹):快速入门&&简单官方实例 - 技术改变视野 大白话之Docker(贰):简单部署一个Tomcat服务并发布内容 - 技术改变视野 大白话之从零讲解DVWA(壹)-SQL注入(SQL Injection) Low Level - 技术改变视野 大白话之从零讲解DVWA(贰)-SQL注入(SQL Injection) Medium/High Level - 技术改变视野 Java日志插件-Slog4J下载 - 技术改变视野 大白话之必会Java Atomic | 线程一点也不安全(一):比自增和synchronized更快速、靠谱的原子操作(调用C语言) - 技术改变视野 Log-MySQL root用户登录后无法查看数据库全部表/正常访问数据库 Access denied for user 'root'@'localhost' to database - 技术改变视野 大白话之Docker(叁):制作一个运行Tomcat服务端的Docker镜像 - 技术改变视野 Github仅保留指定文件/文件夹当前Commit,删除所有历史记录,清除「敏感信息」 - 技术改变视野 将Tomcat、MySQL从Linux迁移到Windows的心路历程(干货):令人恐惧的字符编码 - 技术改变视野 Spring: java.lang.NoSuchMethodError: clearCache | ClassNotFoundException | Error during artifact deployment 思路及解决办法 - 技术改变视野 大白话之Java反射-初学最迷的概念:能干啥?咋用? - 技术改变视野 大白话之Java面向接口编程:最“正经”的中文实例讲解,看不懂来打我! - 技术改变视野 大白话 | 课堂实践:使用Iterator对数组进行遍历 - 技术改变视野 大白话之fail-fast | fail-safe:为什么会有这个机制?它有什么作用? - 技术改变视野 刨根问底 | 大白话:在使用注解后,框架是怎么知道你哪个方法使用了注解的?用@RequestMapping注解举例详解! - 技术改变视野 大白话之必会Java Atomic | 线程一点也不安全(二):Atomic的ABA问题会导致什么情况?如何解决? - 技术改变视野 随笔 | 奇淫技巧 | Java:记return和短路运算符的妙用 - 技术改变视野 随笔 | Tomcat:续-从Linux迁移到Windows编码问题彻底解决 - 技术改变视野 大白话之AutoClosable接口 | try-with-resources:JDK1.7的新特性,提高重复回收效率 - 技术改变视野 大白话之Java多线程join方法:开局一张图,试学一分钟,你就费和我一样,理解介个方法 - 技术改变视野 大白话之Java Stream流:将类数组流化,便捷批量修改,通俗讲解! - 技术改变视野 Java 困扰三周の问题:使用byte[]或skip()方法读取字节流Stream文件尾部多/少/缺字节解决方法 - 技术改变视野 大白话之Java级联调用:一个类,一条语句,同时调用好几个方法,串成一串 - 技术改变视野
从零开始OpenSSL之 (壹) - 使用genrsa、rsa、rsautl生成公私钥 - 技术改变视野
adlered · 2019-12-09 · via 技术改变视野

公钥和私钥

在生活中,我们常常会经历加密->解密的过程。当你在扫码支付、登录用户、进行游戏的时候,大部分数据包传输的都是加密后的数据包。

俗话讲加密

尽我所能,我会将公钥和私钥的概念最简单地讲述出来。

假设A是客户端,B是服务端:

  1. A使用某些手段生成了一段完整的私钥
  2. A使用完整的私钥经过某种算法生成了另一段公钥
  3. A公钥完整的私钥给了B

B想要将东西传给A时:

  1. B公钥要传送的文件乱七八糟地用某种算法掺杂在一起发送给A
  2. B发送给A时,如果有黑客拦截了这个文件,他只能获得一堆乱码
  3. A收到一堆乱码后,使用完整的私钥经过某些算法提取出原文件

由于AB同时拥有公钥私钥,所以双方都可以使用公钥加密并且使用私钥解密

OpenSSL

我们可以将OpenSSL理解为一个工具箱,它能实现大部分的密钥加、解密以及更多高级功能。

请注意

在下文中的命令有&&连接符,为的是让多条命令按顺序执行。

生成私钥

现在,让我们使用OpenSSL生成一段私钥。
在你的Linux或MacOS (Windows需自行安装)中执行下面命令:

1mkdir keys && cd keys

为了方便整理思路,我们只在keys文件夹下进行操作。

1openssl genrsa -out private.key 1024 && ls && cat private.key

我们使用openssl随机生成一串私钥并导出到private.key,然后列出当前文件夹下的内容可以看到private.key,最后抓取private.key中的内容:

 1Generating RSA private key, 1024 bit long modulus
 2...................................................................++++++
 3...........................++++++
 4e is 65537 (0x10001)
 5private.key
 6-----BEGIN RSA PRIVATE KEY-----
 7MIICXAIBAAKBgQC1FTjWrrsokP6DwFL055b0LRdPq1UqcokS7V+jN2EBy79msaG7
 8CDOe7d8sgX8f8DYAXNQ58LGulfvFoCJp1Luoah7eYHcgBa5JiHD3wakkMsnveT8f
 9tfKziTLg7Yzes9mprA3afVvvH4UfLkAIkC437bCbaAe3E0YF1FmI0RdfrwIDAQAB
10AoGAC6E2Sktkh8FwJyQF7+ajwkDXG23EhXpfpVCLcN8Qot3kCANmgK2RKybZy3Dx
11qipyPWm405PKxYyqY9HaA/P+rUGeYmJHgx4tA/Q30uel6a2T1wFvYbo2b+FzBsLp
12aXi/KVaxLNTx2h3g8gf8DjTt5deBJeW0ZtMp1O9NyFo2hLECQQDfvL6WoCBMYZBG
135M9PJ0IE9CriT91beCfUFn+s53umPsmYBjDde6hZ6f9jkXJ4uNt0crT2YP35Prfl
14lLo00+wJAkEAzzHkYsC2wZ/MdiwNOyueNgO2xCmjczkoBuwTCgRtr/Yaal2xpU74
15BhLT1Eld5JrXbmqE5POhd+XYqNcyPLhL9wJAEpJYP6iLBcwTbc8QZkGb+U1LQf3f
16IfiXVcOIVZHhcatEkJny9G+PSedii6FHHz44+TGMU+c5LbdHDIeL7VaqAQJBAJj+
17hV9qYEj/f5HvG2IK5kuKWIXnHTuzA9yAq9pkxL3/IyhRwSCI/Fo3wtVpy3xH3jY5
18T6JkSGHphh++r+joSacCQAorZDk0lmEiZDkXcC44OmoO283FIGR5qUYMcoCX/AH5
195gCy3NOASL0YBfWw9oi93poIKzwKx/xgHa3VSLioYp4=
20-----END RSA PRIVATE KEY-----

我们可以看到OpenSSL已经成功生成了一串私钥。

生成公钥

公钥是用来和原文件进行混淆传输的,它可以被理解为是私钥的不完整版

输入以下命令:

1openssl rsa -in private.key -pubout -out public.key && ls && cat public.key
1-in 使用密钥
2-pubout 输出公钥
3-out 输出名称

openssl rsa的参数如下:

 1adler@localhost ~/keys: openssl rsa --help
 2Invalid cipher '-help'
 3usage: rsa [-ciphername] [-check] [-in file] [-inform fmt]
 4    [-modulus] [-noout] [-out file] [-outform fmt] [-passin src]
 5    [-passout src] [-pubin] [-pubout] [-sgckey] [-text]
 6
 7 -check             Check consistency of RSA private key
 8 -in file           Input file (default stdin)
 9 -inform format     Input format (DER, NET or PEM (default))
10 -modulus           Print the RSA key modulus
11 -noout             Do not print encoded version of the key
12 -out file          Output file (default stdout)
13 -outform format    Output format (DER, NET or PEM (default PEM))
14 -passin src        Input file passphrase source
15 -passout src       Output file passphrase source
16 -pubin             Expect a public key (default private key)
17 -pubout            Output a public key (default private key)
18 -sgckey            Use modified NET algorithm for IIS and SGC keys
19 -text              Print in plain text in addition to encoded

本文我们使用了openssl genrsa、rsa、rsautl三种,分别用于生成密钥、加密文件和解密文件,你可以输入openssl genrsa/rsa/rsautl --help获取帮助。

你会得到如下结果:

1writing RSA key
2private.key public.key
3-----BEGIN PUBLIC KEY-----
4MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1FTjWrrsokP6DwFL055b0LRdP
5q1UqcokS7V+jN2EBy79msaG7CDOe7d8sgX8f8DYAXNQ58LGulfvFoCJp1Luoah7e
6YHcgBa5JiHD3wakkMsnveT8ftfKziTLg7Yzes9mprA3afVvvH4UfLkAIkC437bCb
7aAe3E0YF1FmI0RdfrwIDAQAB
8-----END PUBLIC KEY-----

你会看到公钥实际上比私钥要少得多。

假装有第二台电脑

实际上我们将文件加密后,是传输到另一台电脑然后使用私钥进行解密的,但本次实验我们略过加密文件的传输,直接进行加密和解密。

将文件加密

让我们新建一个文件,并加入内容:

1echo 'Hello world!' > text.txt && cat text.txt

如果返回Hello world!证明你的文件创建完毕。

现在,让我们使用公钥对这个文件进行加密:

1openssl rsautl -encrypt -in text.txt -inkey public.key -pubin -out encryptedFile.txt && cat encryptedFile.txt

你可以使用:
openssl rsautl --help
查看全部参数。

1-encrypt 加密文件
2-in 输入文件
3-inkey 输入密钥
4-pubin 表示使用-inkey输入的是公钥
5-out 输出到指定文件

输入命令后,系统会返回已经加密的文本。

现在,假设这段文本已经传输到了另一台服务器上,并且该服务器拥有之前生成的密钥。

解密

当我们使用公钥加密文件并传输后,就需要使用之前获得到的私钥来解密。

如何解密,我们会在第二章详说。你可以点击这里跳转到第二章。