编码,加密,Hash,序列化,字符集

Hash算法

Hash是对数据形成一种提取,不可逆,可以快速验证,你是不是你,就像是在人这个物体里把指纹提取出来,通过两个人的指纹判断,这两个人是不是同一个人,但是我们不能通过指纹在茫茫人海中找出你

常见的Hash算法有MD5,SHA等

可用于数据签名,系统登录密码数据库统计

通常的网站都会有登录这个功能,验证你有没有权限看里面的东西

但是网站,数据库被盗取,也是一种微妙的可能,假如你使用的某个软件被别人脱库,坏人很可能拿着你的密码四处去试其他平台,谋取利益,Hash在这场防御战中立了功

注册后,开发者会通过hash你的密码,存一下你的hash值到数据库

就算被脱库了,别人也没办法破解你的密码,看不懂

但是黑客有一种彩虹表的东西,记录了通用密码,与通用密码的hash值,通过hash值反查你的密码

于是开发者又出了加盐的方式防御彩虹表,在你的密码里按照规律加入字符,让你的密码不通用,就算被黑客反查出不通用的密码,也看不懂你的密码到底是什么,也无法用这个密码登录

1.对称加密:

加密:使用A秘钥与加密算法对数据进行加密

解密:使用A秘钥与解密算法对数据进行解密

2.非对称加密

加密:使用A秘钥与加密算法对数据进行加密

解密:使用B秘钥与加密算法对数据进行解密

在非对称加密中,通常对数据进行加密的叫公钥,对数据进行解密的叫私钥

场景:网络通信+数字签名

在网络里,A节点与B节点通信,路程上会有无数个中间节点帮忙转发,这就会造成数据泄露,被中间节点进行数据撰改,数据重放等问题

单用对称加密,是行不通的,秘钥会被截获,加密算法,解密算法一般是通用的

非对称加密一般可以抵抗一下

1.A生成一对公钥,私钥,B生成一对公钥,私钥

2.A与B相互传递自己的公钥给对方

3.A使用B的公钥加密数据传输给B,B使用自己的私钥对数据进行解密

4.B使用A的公钥加密数据传输给A,A使用自己的私钥对数据进行解密

假设中间节点拿到AB的公钥和数据,但是没办法解密数据,数据是安全的,但是有个问题,中间节点可以使用A的公钥,对数据进行伪造发送给A,造成攻击

此时,防御此攻击的方法就为,数据签名

1A对原数据进行hash提取指纹

2.把指纹进行数字签名

3.将原数据和指纹打包使用B的公钥加密发给B

4.B用自己秘钥进行解密,使用A的公钥解密指纹,确定数据的身份,使用hash算法对原数据hash,判断指纹是否相等,确定数据是否正确

数据签名

A使用自己的私钥,对数据进行加密,其他人可以通过A的公钥解密,来确认这份数据是A发过来的

序列化

把内存中的对象转化为二进制数据进行通信,存储或者网络上传

字符集

将字符进行编号

比如ASCCI码 将65 代表A,66代表B

BASE64:将二进制数据转化为字符串

编码:将A格式数据转化为B格式

压缩与解压缩