linux 下的加密和解密详解
我们在网上的发送的邮件时明文的,可以被截获,被我们的服务商获得,甚至可以被搜索出来,这时一件很恐怖的事情,如果是一般的嘘寒问暖的信息也就罢了。若是私信就危险了,所以呢,加密就很有必要了!!
什么是加/解密
- 发送方 : 明文 -> 密文
-Tarena ==> 加密 ==> 25 31 24 23 46 31
- 接收方 : 密文 -> 明文
-25 31 24 23 46 31==>解密 ==>Tarena
加密目的及方式
- 确保数据的机密性
-对称加密: 加密/解密用同一个密钥
-非对称加密: 加密/解密用不同的密钥
- 保护信息的完整性
-信息摘要:基于输入的信息生成长度较短,位数固定的散列值
常见的加密算法
- 对称加密
-DES ,
-AES ,
- 非对称加密
-RSA ,
-DSA ,
MD5完整性检验
-生成md5sum校验工具
-与软件官方提供的校验值比对
[root@proxy ~]# vim file1
abcdefg
[root@proxy ~]#md5sum file1
e1ce86726d2c8bea4f1398530b43b6f7 file1
使用GPG对称加密方式保护文件
[root@proxy ~]# yum -y install gnupg2 //安装Gnupg2软件包
[root@proxy ~]#gpg --version //查看版本
GPG使用对称加密算法加密数据的操作
[root@proxy ~]# gpg -c fiel1
根据提示依次输入两次密码,如果在GNOME桌面环境,设置密码的交互界面会是下面的窗口程序
如果是在tty终端执行的上述加密操作,则提示界面也是文本方式的
根据提示输入两次口令,加密后的文件(自动添加后缀 .gpg)就生成了,传递过程中只要发送加密的文件(比如 file1.gpg)就可以了
gpg: 已创建目录‘/root/.gnupg’
gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/root/.gnupg/pubring.gpg’已建立
[root@proxy ~]# cat file1.gpg //查看加密数据为乱码
��@�E�ջ��"��zj��Io'��>L,J����JI_��_�Yy}��>
使用GPG对加密文件进行解密操作
[root@proxy ~]# scp file1.gpg 192.168.4.100:/root //把加密文件拷贝到客户机
[root@client ~]# gpg -d file1.gpg > file1 //解密后保存
gpg: CAST5 加密过的数据
gpg: 以 1 个密码加密
gpg: 警告:报文未受到完整的保护
[root@client ~]# cat file1
abcdefg //查看解密后的文件
使用GPG非对称加密方式保护文件
生成密钥对: gpg --gen-key
接收方UserA创建自己的公钥.私钥对
[root@clinet ~]# gpg --gen-key
- … …
- 请选择您要使用的密钥种类:
- (1) RSA and RSA (default) //默认算法为RSA
- (2) DSA and Elgamal
- (3) DSA (仅用于签名)
- (4) RSA (仅用于签名)
- 您的选择? //直接回车默认(1)
- RSA 密钥长度应在 1024 位与 4096 位之间。
- 您想要用多大的密钥尺寸?(2048) //接受默认2048位
- 您所要求的密钥尺寸是 2048 位
- 请设定这把密钥的有效期限。
- 0 = 密钥永不过期
- <n> = 密钥在 n 天后过期
- <n>w = 密钥在 n 周后过期
- <n>m = 密钥在 n 月后过期
- <n>y = 密钥在 n 年后过期
- 密钥的有效期限是?(0) //接受默认永不过期
- 密钥永远不会过期
- 以上正确吗?(y/n)y //输入y确认
- You need a user ID to identify your key; the software constructs the user ID
- from the Real Name, Comment and Email Address in this form:
- "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
- 真实姓名:UserA
- 电子邮件地址:UserA@tarena.com
- 注释:UserA
- 您选定了这个用户标识:
- “UserA (UserA) <UserA@tarena.com>”
- 更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?O //输入大写O确认
- 您需要一个密码来保护您的私钥。
- 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
- 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
- gpg: 正在检查信任度数据库
- gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
- gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u
- pub 2048R/421C9354 2017-08-16
- 密钥指纹 = 8A27 6FB5 1315 CEF8 D8A0 A65B F0C9 7DA6 421C 9354
- uid UserA (UserA) <UserA@tarena.com>
- sub 2048R/9FA3AD25 2017-08-16
列出公钥 ,查看公钥环 gpg --list-keys
列出所拥有的公钥:他们自己的公钥以及从与之通信的其他人那里导入的任何公钥
[root@client ~]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/9A61D530 2018-05-15
uid UserA (UserA) <UserA@tarena.com>
sub 2048R/03489C24 2018-05-15
[root@client ~]# gpg -a --exprot UserA > /tmp/UserA.pub /--exprot的作用是导出密钥 -a的作用是导出的密钥存储为ASCII格式
[root@client ~]# scp /tmp/UserA.pub 192.168.4.5:/tmp/ //将密钥传给UserB
使用GPG命令结合 --import选项导入发送方的公钥信息,以便在加密文件时指定对应的公钥
[root@proxy ~]# gpg --import /tmp/UserA.pub
gpg: 密钥 C9380AC4:公钥“UserA (UserA) <UserA@tarena.com>”已导入
gpg: 合计被处理的数量:1
gpg: 已导入:1 (RSA: 1)
UserB使用导入的公钥加密数据,并把加密后的数据传给UserA
[root@proxy ~]# echo "I love NB" > haha.txt
[root@proxy ~]#gpg -e -r UserA haha.txt
gpg: BFD6B5F5:没有证据表明这把密钥真的属于它所声称的持有者
pub 2048R/BFD6B5F5 2018-05-15 UserA (UserA <UserA@tarena.com>
主钥指纹: 9FBE 7A97 624F 8273 B4AC 636A 81EF F0AC C938 0AC4
子钥指纹: 9A63 AD39 343C FE4A EBB4 B66E F2B6 8412 BFD6 B5F5
这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自
己在做什么,您可以在下一个问题回答 yes。
无论如何还是使用这把密钥吗?(y/N)y
[root@proxy ~]# scp haha.txt.gpg 192.168.4.100:/root //加密的数据传给UserA
[root@client ~]# gpg -d haha.txt.gpg > love.txt
您需要输入密码,才能解开这个用户的私钥:“UserA(UserA) <UserA@tarena.com>”
2048 位的 RSA 密钥,钥匙号 BFD6B5F5,建立于 2018-05-15 (主钥匙号 C9380AC4)
gpg: 由 2048 位的 RSA 密钥加密,钥匙号为 BFD6B5F5、生成于 2018-05-15
“UserA (UserA) <UserA@tarena.com>”
[root@client ~]# cat love.txt //获得解密后的文件内容
I love you
[root@client ~]# ls /root/.gnupg //产生的密钥放在这个文件里面
[root@client ~]# rm -rf .gnupg/ //删除密钥
[root@client ~]# reset //如果终端不能用了,就执行reset重置
GPG签名和认证:签名的目的,主要时确保来源的数据正确
使用GPG的签名机制,检查数据来源的正确性。使用私钥签名的文件,是可以使用对应的公钥验证签名的,只要验证成功,则说明这个文件一定是出自对应的私钥签名,除非私钥被盗,否则一定能证明这个文件来自于某个人!
[root@client ~]# tar zcf log.tar /var/log //建立测试软件包
[root@client ~]# gpg -b log.tar //创建分离式数字签名
[root@client ~]# ls -lh log.tar*UserA.pub
-rw-r--r--. 1 root root 914K 5月 15 14:42 log.tar
-rw-r--r--. 1 root root 287 5月 15 14:43 log.tar.sig
[root@client ~]# gpg -a --export UserA > /tmp/UserA.pub //把公钥导出
[root@client ~]# scp /tmp/UserA.pub 192.168.4.5:/tmp/
[root@client ~]# scp log.tar* 192.168.4.5:/root /将签名文件与签名传给UserB
log.tar 100% 914KB 130.9MB/s 00:00
log.tar.sig 100% 287 683.8KB/s 00:00
[root@proxy ~]# gpg --import /tmp/xxxxx.pub //导入公钥
[root@proxy ~]# gpg --verify log.tar.sig log.tar 在proxy上验证签名
gpg: 于 2018年05月15日 星期二 14时43分28秒 CST 创建的签名,使用 RSA,钥匙号 C9380AC4
gpg: 完好的签名,来自于“UserA (UserA) <UserA@tarena.com>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg: 没有证据表明这个签名属于它所声称的持有者。
主钥指纹: 9FBE 7A97 624F 8273 B4AC 636A 81EF F0AC C938 0AC4
r
linux 下的加密和解密详解相关推荐
- 加密、解密详解及CA的实现
加密.解密详解及CA的实现 推荐 转载nmshuishui的文章,文章链接 http://blog.51cto.com/nmshuishui/1370917?utm_source=tuicool&am ...
- JavaScript实现加密与解密详解
这篇文章介绍了Java脚本语言实现加密与解密详解的方法,文中通过示例代码介绍的非常详细.对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 目前原生射流研究-貌似并没有提供讯息摘要5计算相 ...
- Linux下Nginx编译安装过程详解
Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...
- Linux下的samba服务配置详解
Linux下的samba服务配置详解 一.Samba介绍 二.Samba工具及特性 三.搭建环境介绍 四.Samba配置步骤 1.服务端操作 2.在客户端操作 五.测试用户的权限情况 一.Samba介 ...
- C#实现RSA加密和解密详解
C#实现RSA加密和解密详解 原文:C#实现RSA加密和解密详解 RSA加密解密源码: using System; using System.Collections.Generic; using Sy ...
- Linux下fdisk命令操作磁盘详解--添加、删除、转换分区
linux下fdisk命令操作磁盘详解--添加.删除.转换分区等 fdisk 操作硬盘的命令格式如下: [root@localhost beinan]# fdisk 设备 比如我们通过 fdisk - ...
- 【Linux开发】Linux下jpeglib库的安装详解
Linux下jpeglib库的安装详解 首先要下载所需的库压缩包:jpegsrc.v6b.tar.gz或 jpegsrc.v8b.tar.gz 然后将下载的压缩包随便放在和解压到你喜欢的地方. # t ...
- Linux下暴力破解工具Hydra详解
Linux下暴力破解工具Hydra详解 一.简介 Number one of the biggest security holes are passwords, as every password s ...
- Linux 下 TC 命令原理及详解<一>
文章目录 1 前言 2 相关概念 3 使用TC 4 创建HTB队列 5 为根队列创建相应的类别 6 为各个类别设置过滤器 7 复杂的实例 Linux 下 TC 命令原理及详解<一> Lin ...
最新文章
- runtime自动归档/解档
- 后退N帧协议中的滑动窗口
- java中servlet filter_lua学习笔记(二)仿java servlet中Filter功能
- myeclipse设置
- Boost:使用find_if()算法来检测两个向量交叉的点
- Windows窗口样式
- .Net培训个人总结笔记26
- PHP学习笔记03:简单网上调查站点
- c语言栈的实现以及操作_python模拟栈的操作实现非递归方式的快速排序算法
- log4net用法实例
- ps怎么把模糊的图片变清楚
- 实现生成木马的自动变异
- Java Web从入门到实战
- 解决微信浏览器video标签自动播放视频失效
- 现代密码学期末复习26问
- C语言:输入两个数字,将其按从小到大输出!
- MathType编辑半直积符号的步骤
- 多语种翻译器,中英文互译翻译器
- TI AM5718的PRU开发详解
- 继电保护计算机化,继电保护装置技术的发展
热门文章
- mysql aced是什么_memcached编译安装及缓存mysql测试
- 怎么靠网络的正常渠道赚钱?
- 自学就能轻松学会搭建网站的步骤教程
- VMware虚拟机安装win10系统教程(巨细)
- 分段函数sgnx的C语言程序,几个重要的分段函数
- mysql是一个大型数据库_MySQL是一个大型关系型数据库管理系统(RDBMS)。
- 手机浏览器点击input放大问题
- 左手拿叉右手拿刀——话西餐
- linux终端加密,在Linux系统上安装和使用VeraCrypt加密的方法
- xc7z030有多少个quad_XC7Z030-2FBG676I;XCZ7030-2FFG676I ZYNQ7系列专营