一、简介
1、起源:古代用于战争,传递信息之前加密棒。
(1)、移位法
做两根一样加密棒,缠绕加密棒可以得到正确信息
(2)、替换法
有一本密钥本,里面记录着密文中文字真正对应的内容
2、分类:对称加密和非对称加密
(1)对称加密:
加密和解密的密钥是同一个,例如DES、IDEA、RC4、RC5、RC6 和 AES ,DES密钥太短容易被破解,基本弃用,AES用的更多。
优点:算法公开、计算量小、加密速度快、加密效率高
缺点:在数据传送前,发送方和接收方必须商定好秘钥,然后 使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
(2)非对称加密:
加密和解密密钥不一样,是一对,公钥和私钥,例如:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)等
优点:安全,私钥破解难度较大(数学难题,数论等),利于传输,公钥可以完全公开
缺点:速度较慢,并且不像对称加密,非对称加密有可能会被利用公钥,伪装发送者,误导接收者。通常解决方案是 会配上数字签名
二、非对称加密
1、加密:
发送者持有自身 私钥 和 接收者公钥,接收者 持有自身私钥 和 发送者公钥。 发送者 用 公钥 通过 加密算法加密,生成密文,接收者用自身私钥 通过 加密算法 解密。
流程图如下
2、数字签名:
发送者持有自身 私钥 和 接收者公钥,接收者 持有自身私钥 和 发送者公钥。
(1)、简单版
发送者用发送者私钥 通过 加密算法 得到数字签名,接收者用发送者的公钥 通过加密算法 得到原文,证明是发送者发起的签名,别人无法伪造。
(2)、为了更方便验证,一般会把数字签名和 原文一起发送给接收者,接收者得到原文后和之前原文对比,看是否相同。
(3)、流程图如下
数字签名主要为了证明 来源,加密算法主要是为了 对原数据进行保护
3、加密+数字签名:
数字签名习惯把 原文 + 数字 签名 发送给 对方, 如果为了 解决 非对称加密,被第三方伪装,所以会使用 密文+数字签名的方式, 密文 得到 原文 ,和 数字签名得到原文 ,一样,就证明了 这密文是 对方发送的。
两者结合是更加安全的
三、摘要算法(Hash算法)
Hash算法特别的地方在于它是一种单向算法,用户可以通过hash算法对目标信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等
例如Md5、SHA1、SHA256等
信息摘要算法,它一般是不可逆的,不可以解密。所以它只能算的上是一种单向加密算法。
但MD5是现在已经很容易被破解了
加密是什么?加密,指的是对数据进行转换以后,数据变成了另一种格式,并且除了拿到解密方法的人,没人能把数据转换回来。但Md5不可逆,是单向的,所以严格来说不算加密算法
定义:把任意数据转换成指定大小范围(通常很小)的数据
作用:摘要、数字指纹
实际用途:数据完整性验证,用于HashCode和HashMap,一般用于Map和Set的是需要重写HashCode和equals
Hash算法要尽量减少碰撞和难被解密
四、Base64
Base64也不是加密算法,它是一种数据编码方式,虽然是可逆的,但是它的编码方式是公开的,无所谓加密。
就是把二进制编码称 常用字符串,用6位二进制转成对应常用字符,有64个常用字符。为什么不用128,因为常用字符没有128个
编码后的数据比原始数据略长,为原来的4/3 。因为在RFC 2045规定,每76个字符,还需要加上一个回车换行。
Base64主要为了方便传输,让原数据具有字符串所具有的特性,如可以放URL中传输、可以保存到文本文件、可以通过普通聊天软件进行文本传输
把原本人眼可以读懂的字符串变成读不懂的字符串,降低偷窥风险
PS:Base64 加密传输图片,可以更安全和高效,真的吗?
Base64 不安全,因为是一一对应,查表就行,没有安全性,也不高效,编码后的数据比原始数据略长,为原来的4/3,所以不是更高效。
变种:Base58,去掉几个字符会丢失部分信息,主要用在比特币或虚拟货币地址,o和0太相似,去掉+ 和 反斜杠,主要为了双击复制。
Base64 是用在某些场景只能用字符串传递
五、Url Encode编码
基于Base64的改变
1、将URL中的保留字符使用百分号%进行编码
2、目的:消除歧义,避免解析错误
六、压缩和解压缩
1、压缩:把数据换一种方式存储,以减少存储空间
2、解压缩:把压缩后的数据还原成原先的形式,以便使用
3、常用压缩算法:DEFLATE(文档归档压缩算法)、JPEG、MP3
4、压缩属于一种编码方式
5、媒体数据的编解码
(1)、图片 的编码:把图像数据写成JPG、PNG等文件的编码格式
(2)、图片的解码:把JPG、PNG等文件中的数据解析成标准图像数据
(3)、音频、视频的编解码
(4)、有损和无损压缩
七、序列化
1、序列化:把数据对象(内存中)转成字节序列的过程
2、反序列化:把字节序列重新转成内存中的对象
3、目的:让内存中的对象可以被存储和传输