一、 密码概述

发送者对明文进行加密然后生成密文,接受者再对密文解密得到明文的过程。 现在使用的所有加密算法都是公开的!但是密钥肯定不是公开的。

1 散列(哈希)函数

  • 通常有MD5、SHA1、SHA256、SHA512
  • 实质是抽取特征码,这样一般不会重复!是的,不同的文本它的哈希结果是有可能相同的,但概率很小。
    (举例:比如想要识别一个人,我们可以通过他的指纹来锁定他,指纹出现相同的概率很低吧!在这里,人就相当于数据,而指纹就相当于对人这个数据进行hash后得到的结果)
  • 对任意一个二进制数据进行哈希,可以得到定长的字符串结果,例如MD5哈希结果是128位,更多是以32个字符的十六进制格式哈希输出
  • 还有就是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名

2 对称加密算法

  • 有DES、3DES、AES
  • 加密和解密使用同一个秘钥,加密解密的速度快
  • 适合给大数据进行加密
  • 密钥的安全性非常重要

3 非对称加密算法:RSA

  1. 使用 公钥 加密,使用 私钥 解密
  2. 使用 私钥 加密,使用 公钥 解密(私钥签名,公钥验签)
  3. 更安全,当然速度会慢下来,如果随着硬件的突破,使用越来越多,特别是支付

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_APRI_APUB_BPRI_B)。

A向B发送Message的整个签名和加密的过程如下:

  1. A先使用HASH对Message生成一个固定长度的信息摘要Message_hash_A
  2. A使用A的私钥PRI_AMessage_hash_A进行签名得到Message_sign(这里为什么不直接对Message进行签名,而要对Message_hash_A进行签名呢?因为Message的长度可能很长,而Message_hash_A的长度则是固定的,这样性能更高,格式也固定,况且hash的结果一般不会出现重复的可能)
  3. A接着使用B的公钥PUB_B对信息Message和信息Message_sign进行加密得到Message_RSA,这时A将Message_RSA发送给B。

当B接收到A的信息Message_RSA后,获取Message的步骤如下:

  1. B用自己的私钥PRI_B解密得到明文:MessageMessage_sign
  2. 然后B使用A的公钥PUB_AMessage_sign得到Message_hash_A;同时,B再对Message使用与A相同的HASH得到Message_hash_B
  3. 如果Message_hash_AMessage_hash_B相同,则说明Message没有被篡改过。

上面的过程中,A知道A的公私钥同时也要知道B的公钥;同理B要知道A的公钥和B的公私钥

关于公私钥再打个比方:公钥就像一把锁一样将数据锁住;私钥就像钥匙一样,能将对应的锁打开。

公钥加密,私钥解密的好处是:公钥可以公开,那么无论谁有公钥都可以给你发送信息,而且也只有你才能解密

我们经常使用的Github就是使用了签名的方法,SSH,在本地电脑生成一对公私钥,将公钥传到github,然后使用私钥进行签名,github通过公钥延签后认为你的身份合法。

另外,加密和编码是不一样的,比如ASCII是属于编码,是将0~255与字符一一对应。

网络安全——数据的加密与签名,RSA介绍的更多相关文章

  1. 使用 GPG 对数据进行加密解密签名

    一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.or ...

  2. 关于RSA加密和签名的区别与联系

    发现网上对于RSA加密和签名的介绍普遍偏向于使用和概念的说明,今天想说一点不一样的.对于加解密和签名的使用及概念就不再说了,不知道的请自行百度. 签名的本质其实就是加密,但是由于签名无需还原成明文,因 ...

  3. C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出

    差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...

  4. python 加密 解密 签名 验证签名 公钥 私钥 非对称加密 RSA

    加密与解密,这很重要,我们已经可以用pypcap+npcap简单嗅探到网络中的数据包了.而这个工具其实可以嗅探到更多的数据.如果我们和别人之间传输的数据被别人嗅探到,那么信息泄漏,信息被篡改,将给我们 ...

  5. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  6. iOS中使用RSA对数据进行加密解密

    RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...

  7. JSON 接口如何实现 RSA 非对称加密与签名

    代码地址如下:http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套公 ...

  8. python实现RSA加密和签名以及分段加解密的方案

    1.前言 很多朋友在工作中,会遇到一些接口使用RSA加密和签名来处理的请求参数,那么遇到这个问题的时候,第一时间当然是找开发要加解密的方法,但是开发给加解密代码,大多数情况都是java,c++,js等 ...

  9. python tkinter 实现 带界面(GUI)的RSA加密、签名

    代码环境,python3.5.2 RSA加密的过程是:使用公钥加密,私钥解密 RSA签名的过程是:使用私钥签名,公钥验证 所以核心代码就是,生成公钥私钥,使用公钥私钥分别进行加密解密. 在实际编码的时 ...

随机推荐

  1. AutoMapper(七)

    返回总目录 Null值替换 如果源类型的成员链上的属性值为Null,Null值替换允许提供一个可替换的值.下面有两个类Person和PersonInfo类,都有一个属性Title(头衔),从Perso ...

  2. 感悟 GNU C 以及将 Vim 打造成 C/C++ 的半自动化 IDE

    C 语言在 Linux 系统中的重要性自然是无与伦比.不可替代,所以我写 Linux 江湖系列不可能不提 C 语言.C 语言是我的启蒙语言,感谢 C 语言带领我进入了程序世界.虽然现在不靠它吃饭,但是 ...

  3. MySql LIKE 查找带反斜线“\”的记录

    解决方法是在反斜线“\前加“\\\”三个反斜杠. SELECT * FROM 表名 AS a WHERE a.字段 \\\\qc0npwqe.3v4', '%') 原理: 写成三个'\'的原因是反斜线 ...

  4. [Java定时器]用Spring Task实现一个简单的定时器.

    今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...

  5. 解析大型.NET ERP系统 查找与钻取

    查找 Lookup 窗体是一个容器,也可以把TextBox,Button也看成是一个容器,可以往容器里面添加按钮. 参考下面的实现代码,给TextBox增加查找按钮. var btn = new Bu ...

  6. c# 检测操作系统版本

    我们通过System.Environment.OSVersion.Version获得操作系统的版本号,然后再根据版本号进行判断操作系统是什么版本 Version 类的属性 Operating syst ...

  7. [Algorithm] 使用SimHash进行海量文本去重

    在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(L ...

  8. 深入理解Spring--动手实现一个简单的SpringIOC容器

    接触Spring快半年了,前段时间刚用Spring4+S2H4做完了自己的毕设,但是很明显感觉对Spring尤其是IOC容器的实现原理理解的不到位,说白了,就是仅仅停留在会用的阶段,有一颗想读源码的心 ...

  9. C#的扩展方法解析

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继 ...

  10. u-boot源码汇编段简要分析

    Hi,大家好!我是CrazyCatJack,你们可以叫我CCJ或者疯猫.今天我给大家带来的是u-boot的源代码汇编段分析,以后还会给大家讲解后续的C代码,请持续关注哦^_^ 先简单说一下u-boot ...