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的用途

  1. 将 进制数据扩充 储存和传输途径( 如可以把数据保存到文本文件、可以通过聊天对话框或 短信形式发送二进制数据、可以在 URL中加入 简单的二进制数据)
  2. 普通的字符在经过 Base64 编码后的结果会变得 眼不可读,因此可以适用于一定条件下的防偷窥(较少用)

Base58

  • 去掉I l O 0 + /
  • 用于加密货币的地址

URL encoding

在 URL 的字符中,对一些用于特殊用途的保留字符,使用百分号"%"为前缀进行单独编码,以避
免出现解析错误。

  • 将URL中的保留字符使用%进行编码
  • 目的;消除歧义,避免解析错误

压缩与解压缩

  • 压缩:将数据使 具有存储优势的编码算法进 编码。
  • 解压缩:将压缩数据解码还原成原来的形式,以 方便使用 。
  • 常见的压缩算法;DEFLATE、JPEG、MP3
  • 压缩属于编码吗?

编码即把数据从一种形式转换为另一 种形式。压缩过程属于编码过程,解压缩过程属于解码过程。

媒体数据的编解码

  • 将图像、音频、视频数据通过编码来转换成存档形式(编码),以及从存档形式转换回来(解码)。
  • 优秀的压缩算法,使用的空间更小,压缩速度更快。
    • WebP>PNG/JPEG

序列化

把数据对象( 一般是内存中的,如JVM 中的对象)转换成字节序列的过程。对象在程序内存 的里存放形式是散乱的(存放在 同的内存区域、并且由引用进行连接),通过序 化可以把内存中的对象转换成一个字节序 ,从而使 用byte[]等形式进行本地存储或网络传输,在需要的时候重新组装(反序列化)来使用。

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

Hash 重点内容

Hash是单向的

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

扫描二维码关注公众号,回复: 3714743 查看本文章
  • 作用:摘要、数字指纹
  • 经典算法: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:中国 研标准,多字节,字符集 + 编码

猜你喜欢

转载自blog.csdn.net/songyuequan/article/details/83215478
今日推荐