网络安全——数据的加密与签名,RSA介绍
一、 密码概述
发送者对明文进行加密然后生成密文,接受者再对密文解密得到明文的过程。 现在使用的所有加密算法都是公开的!但是密钥肯定不是公开的。
1 散列(哈希)函数
- 通常有MD5、SHA1、SHA256、SHA512
- 实质是抽取特征码,这样一般不会重复!是的,不同的文本它的哈希结果是有可能相同的,但概率很小。
(举例:比如想要识别一个人,我们可以通过他的指纹来锁定他,指纹出现相同的概率很低吧!在这里,人就相当于数据,而指纹就相当于对人这个数据进行hash后得到的结果) - 对任意一个二进制数据进行哈希,可以得到定长的字符串结果,例如MD5哈希结果是128位,更多是以32个字符的十六进制格式哈希输出
- 还有就是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名
2 对称加密算法
- 有DES、3DES、AES
- 加密和解密使用同一个秘钥,加密解密的速度快
- 适合给大数据进行加密
- 密钥的安全性非常重要
3 非对称加密算法:RSA
- 使用
公钥加密,使用私钥解密 - 使用
私钥加密,使用公钥解密(私钥签名,公钥验签) - 更安全,当然速度会慢下来,如果随着硬件的突破,使用越来越多,特别是支付
1是对数据加密,2是防止伪造客户端数据,对服务器攻击,更重要是防止模拟了客户端,进行支付相关的操作
4 对称加密与非对称加密的区别
就个人理解,最主要的就是密钥的不同,对称加密客户端和服务端使用同一个密钥,非对称加密使用不同的密钥。
客户端的代码是很容易被破解的,IDA、hopper disassembler工具的使用,使得破解更加简单而且破解后容易阅读,再配合Charles抓取网络包,根据关键字很容易就定位到加密代码,然后获取密钥。
由于对称加密密钥一样,所以解密就轻而易举;但是非对称加密就不会出现这种问题,因为服务端和客户端的密钥不一样,公钥加密私钥解密,加密的公钥也是公开的,而私钥一般放在服务端,黑客一般是拿不到的。
另外就是没有密钥情况下强制暴力破解,非对称加密也要比对称加密花的多的多的时间来破解。一条信息就要花你几年的时间,所以很安全。
二、加密与签名区别(RSA)
- 最大的区别是,加密是可逆的,而签名是不可逆的。
比如对于"Hello world!"进行加密后得到结果R,还可以使用密钥通过结果R解密得到"Hello world!";而对"Hello world!"进行签名得到结果R,却不能使用密钥通过R获得"Hello world!",要不然的话压缩算法要逆天了!比如hash,使用几十个字符就能存储几G几T的数据。。。
- 加密是对数据进行机密性保护,签名主要用于身份验证
比如A对B发送了信息Message;通过加密后,即便C通过网络包截取获得了Message,它也不知道里面的具体内容,只能看到一堆乱码;通过签名,假设D也用相同的加密算法发送了此Message,但是签名错误,那么B通过签名依然拒绝D的Message。
- 以当前使用的比较多的RSA为例举例:
假设A、B双方均拥有一对公私钥(PUB_A、PRI_A、PUB_B、PRI_B)。
A向B发送Message的整个签名和加密的过程如下:
- A先使用HASH对Message生成一个固定长度的信息摘要
Message_hash_A - A使用A的私钥
PRI_A对Message_hash_A进行签名得到Message_sign(这里为什么不直接对Message进行签名,而要对Message_hash_A进行签名呢?因为Message的长度可能很长,而Message_hash_A的长度则是固定的,这样性能更高,格式也固定,况且hash的结果一般不会出现重复的可能) - A接着使用B的公钥
PUB_B对信息Message和信息Message_sign进行加密得到Message_RSA,这时A将Message_RSA发送给B。
当B接收到A的信息Message_RSA后,获取Message的步骤如下:
- B用自己的私钥
PRI_B解密得到明文:Message和Message_sign; - 然后B使用A的公钥
PUB_A解Message_sign得到Message_hash_A;同时,B再对Message使用与A相同的HASH得到Message_hash_B; - 如果
Message_hash_A与Message_hash_B相同,则说明Message没有被篡改过。
上面的过程中,A知道A的公私钥同时也要知道B的公钥;同理B要知道A的公钥和B的公私钥
关于公私钥再打个比方:公钥就像一把锁一样将数据锁住;私钥就像钥匙一样,能将对应的锁打开。
公钥加密,私钥解密的好处是:公钥可以公开,那么无论谁有公钥都可以给你发送信息,而且也只有你才能解密
我们经常使用的Github就是使用了签名的方法,SSH,在本地电脑生成一对公私钥,将公钥传到github,然后使用私钥进行签名,github通过公钥延签后认为你的身份合法。
另外,加密和编码是不一样的,比如ASCII是属于编码,是将0~255与字符一一对应。
网络安全——数据的加密与签名,RSA介绍的更多相关文章
- 使用 GPG 对数据进行加密解密签名
一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.or ...
- 关于RSA加密和签名的区别与联系
发现网上对于RSA加密和签名的介绍普遍偏向于使用和概念的说明,今天想说一点不一样的.对于加解密和签名的使用及概念就不再说了,不知道的请自行百度. 签名的本质其实就是加密,但是由于签名无需还原成明文,因 ...
- C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出
差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...
- python 加密 解密 签名 验证签名 公钥 私钥 非对称加密 RSA
加密与解密,这很重要,我们已经可以用pypcap+npcap简单嗅探到网络中的数据包了.而这个工具其实可以嗅探到更多的数据.如果我们和别人之间传输的数据被别人嗅探到,那么信息泄漏,信息被篡改,将给我们 ...
- iOS使用Security.framework进行RSA 加密解密签名和验证签名
iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...
- iOS中使用RSA对数据进行加密解密
RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...
- JSON 接口如何实现 RSA 非对称加密与签名
代码地址如下:http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套公 ...
- python实现RSA加密和签名以及分段加解密的方案
1.前言 很多朋友在工作中,会遇到一些接口使用RSA加密和签名来处理的请求参数,那么遇到这个问题的时候,第一时间当然是找开发要加解密的方法,但是开发给加解密代码,大多数情况都是java,c++,js等 ...
- python tkinter 实现 带界面(GUI)的RSA加密、签名
代码环境,python3.5.2 RSA加密的过程是:使用公钥加密,私钥解密 RSA签名的过程是:使用私钥签名,公钥验证 所以核心代码就是,生成公钥私钥,使用公钥私钥分别进行加密解密. 在实际编码的时 ...
随机推荐
- [翻译]AKKA笔记 - 有限状态机 -1
原文地址:http://rerun.me/2016/05/21/akka-notes-finite-state-machines-1/ 我最近有个机会在工作上使用了Akka FSM,是个非常有趣的例子 ...
- Rxjava Subjects
上次提到调用observable的publish和connect方法后可以将一个Observable发出的对象实时传递到订阅在上的subscriber. 这个和Rxjava中Subject的概念十分相 ...
- HTML5之应用缓存---manifest---缓存使用----Web前端manifest缓存
相信来查这一类问题的都是遇到问题或者是初学者吧! 没关系相信你认真看过之后就会知道明白的 这是HTML5新加的特性 HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连 ...
- js连等赋值
引用:http://www.iteye.com/topic/785445 https://segmentfault.com/q/1010000002637728 这是一个问题 var a = {n:1 ...
- SFTP 命令列表以备查询
Available commands: ascii Set transfer mode to ASCII binary Set transfer mode to binary cd path Chan ...
- mongoose - 让node.js高效操作mongodb
Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...
- 【原】SDWebImage源码阅读(二)
[原]SDWebImage源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 解决上一篇遗留的坑 上一篇中对sd_setImageWithURL函数简单分析了一下,还 ...
- ElasticSearch 5学习(3)——单台服务器部署多个节点
一般情况下单台服务器只会部署一个ElasticSearch node,但是在学习过程中,很多情况下会需要实现ElasticSearch的分布式效果,所以需要启动多个节点,但是学习开发环境(不想开多个虚 ...
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...
- ES6环境搭建及react-router学习
一.起因 ES6新纳入了很多振奋人心的新特性,真的很让人忍不住去尝试一下.不过,由于现在大部分的浏览器对ES6的支持程度都不是很好.所以如果想要放心地使用一些新特性,还需要用一些工具,将ES6或者ES ...