HenCoder Plus L02—— 编码、加密、Hash

为什么要讲这些东西?
因为这些东西经常会被用到,但需要真正理解才能正确使用
相关词: MD5、SHA1、RSA、DSA、AES、BASE64、encodedURL、Unicode、UTF-8、GBK、IOS-8859-1…
密码学
起源:古代战争
移位式加密:密码棒
具备密码学的两个要素

加密算法:缠木棍后横着写
密钥:木棍的规格
替换式加密
加密算法:替换
密钥:码表
现代密码学
不仅可以用于文字加密,还可以用于二进制内容加密。
对于计算机非常有用,因为计算机的通信是喊话式的。
对称加密
非对称加密
对称加密
原理:使用密钥和加密算法对数据进 转换,得到的无意义数据即为密文;使用 密钥和解密算法对密文进行逆向转换,得到原数据。


经典算法:DES(因密钥太短被弃用),AES
什么是对称加密的密钥破解。关键是拿到原文和密文之后。算出来密钥。最优的加密算法的破解方法是穷举法。
非对称加密 重点内容
原理:使用公钥加密得到密文,使用私钥解密得到源数据。


场景


RSA 算法是比较简单的非对称加密算法。但是还是比较复杂
延伸用途 : 签名和验证
公钥能不能解私钥呢?
比特币 椭圆曲线算法 ECDSA (公钥就是依靠私钥算出来的)
经典算法:RSA、DSA(专门用来签名和验证)
破解思路 拿到公钥之后,可以算出私钥就成功了。
签名和验证
私钥签名
公钥验证
数字签名和验证(反过来用)。我用我的私钥对欠条进行签名。你用我的公钥对他进行解密,就可以拿到欠条。任何人都无法造出能够被我的公钥去还原成明文的加密数据。

加密+签名
防止别人伪造信息来源。

密码学密钥和登录密码
密钥(key) 完美的契合的东西。是我在拿到你密文之后可以得到原文。
场景:用于加密和解密
目的:保证数据被盗时不会被人读懂
焦点:数据
是一个数学性非常强的东西。
密码(password) 通行口令,是一个身份的验证。密码没有任何数学相关的东西。
场景:用户进入网站或者游戏前的身份验证
焦点:身份
目的:数据提供方或应用服务方对账户拥有者数据的保护,保证「你是你」的时候才提供权限
Base64
将二进制数据转换成由64个字符组成的字符 的编码算法
a-z A-Z 0-9 + /

什么是二进制数据?
广义:所有计算机数据都是二进制数据
狭义: 非本数据即二进制数据
Base64的缺点
因为自身的原理,因此每次 Base64 编码之后,数据都会增加约1/3,所以会影响存
储和传输性能。

Base64的用途
将 进制数据扩充 储存和传输途径( 如可以把数据保存到文本文件、可以通过聊天对话框或 短信形式发送二进制数据、可以在 URL中加入 简单的二进制数据)
普通的字符在经过 Base64 编码后的结果会变得 眼不可读,因此可以适用于一定条件下的防偷窥(较少用)
Base58
去掉I l O 0 + /
用于加密货币的地址
URL encoding
在 URL 的字符中,对一些用于特殊用途的保留字符,使用百分号"%"为前缀进行单独编码,以避
免出现解析错误。

将URL中的保留字符使用%进行编码
目的;消除歧义,避免解析错误
压缩与解压缩
压缩:将数据使 具有存储优势的编码算法进 编码。
解压缩:将压缩数据解码还原成原来的形式,以 方便使用 。
常见的压缩算法;DEFLATE、JPEG、MP3
压缩属于编码吗?
编码即把数据从一种形式转换为另一 种形式。压缩过程属于编码过程,解压缩过程属于解码过程。

媒体数据的编解码
将图像、音频、视频数据通过编码来转换成存档形式(编码),以及从存档形式转换回来(解码)。
优秀的压缩算法,使用的空间更小,压缩速度更快。
WebP>PNG/JPEG
序列化
把数据对象( 一般是内存中的,如JVM 中的对象)转换成字节序列的过程。对象在程序内存 的里存放形式是散乱的(存放在 同的内存区域、并且由引用进行连接),通过序 化可以把内存中的对象转换成一个字节序 ,从而使 用byte[]等形式进行本地存储或网络传输,在需要的时候重新组装(反序列化)来使用。

序列化:把数据对象( 一般是内存中的,如JVM 中的对象)转换成字节序列的过程。
反序列化:把字节序列重新转化为内存中的对象。
目的: 使内存中的对象可以被存储和传输
Hash 重点内容
Hash是单向的

定义:把任意数据转换成指定范围(通常很小,如256 字节以内)的数据。

作用:摘要、数字指纹
经典算法:MD5、SHA1、SHA256
实际用途:数据完整性
hashCode和HashMap
为什么hashCode 和 equals 都要重写呢
指纹信息,快读判断你是你。
隐私保护
加盐:使彩虹表失效
MD5是不可逆加密
签名与验证(完整)


字符集
ASCII:128 个字符,1 字节
ISO-8859-1:对 ASCII 进 扩充,1 字节
Unicode:13 万个字符,多字节
UTF-8:Unicode 的编码分支
UTF-16 :Unicode 的编码分支
GBK / GB2312 / GB18030:中国 研标准,多字节,字符集 + 编码
————————————————
版权声明:本文为CSDN博主「songyuequan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/songyuequan/article/details/83215478

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值