加密、编码、Hash、字符集

1.加密

1.1对称加密:

通信双⽅使⽤同⼀个密钥,使⽤加密算法配合上密钥来加密,解密时使⽤加密过程的完全逆过程配合密钥来进⾏解密。(加密解密算法不同,密钥相同)
破解方法:暴力穷举,因此密钥要满足使暴力破解的时间足够长
缺点:密钥易泄漏

1.2非对称加密:

使⽤公钥对数据进⾏加密得到密⽂;使⽤私钥对数据进⾏解密得到原数据。(加密解密算法相同,密钥不同)(我方持有自己的私钥和对方的公钥,使用对方的公钥进行数据加密,对方用自己的私钥进行解密)

1.3数字签名(防止信息被伪造):

原理:非对称加密中私钥加密的数据能被公钥解开
使用私钥对原数据进行签名(加密计算),用公钥对加密数据进行解密,可以证明该原数据是来自私钥持有者,来防止中间人攻击



加密通信的基本原理(缺少hash步骤)

2.编码:用一个固定的算法将信息a格式转化为b格式

2.1Base64:

概念:将⼆进制数据(即非文本数据)转换成由 64 个字符组成的字符串的编码算法, 将⼆进制数据扩充了储存和传输途径。

Base64索引表

算法:将原数据(每个字符8 位)的每 6 位对应成 Base 64 索引表中的⼀个字符编排成⼀个字符串。
Example

缺点:因为⾃身的原理(6 位变 8 位),因此每次 Base64 编码之后,数据都增⼤约1/3,所以会影响存储和传输性能。

2.2URL 使⽤的百分号编码:

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

2.3压缩与解压缩:

压缩:将数据使⽤更具有存储优势的编码算法进⾏编码。
解压缩:将压缩数据解码还原成原来的形式,以⽅便使⽤。

2.4图⽚与⾳频、视频编解码

将图像、⾳频、视频数据通过编码来转换成存档形式(编码),以及从存档形式转
换回来(解码),以便存储和压缩媒体数据。

3.序列化:参考我的另一篇博客

https://www.jianshu.com/p/b6b62c48ec55

4.Hash:

把任意数据转换成指定⼤⼩范围(通常很⼩,例如 256 字节以内)的数据。(相当于该文件的“数字指纹”,l来唯一标识该文件)
eg:Java 中的 hashCode() ⽅法。
那么,我们怎么重写 hashCode ⽅法?
把 equals() ⽅法中的每个⽤于判断相等的变量都放进 hashCode() 中,⼀起⽣成⼀
个尽量不会碰撞的整数即可。因为equals()比较时是会先比较对象的hashCode()
实际用途:数据完整性验证(MD5码)、快速查找(HashMap)、隐私保护(网站登录)

完整的签名与验证

5.字符集

⼀个由整数映射现实世界中的⽂字符号的 Map

  • ASCII:128 个字符,1 字节

  • ISO-8859-1:对 ASCII 进⾏扩充,1 字节

  • Unicode:13 万个字符,多字节

    • UTF-8:Unicode 的编码分⽀
    • UTF-16 :Unicode 的编码分⽀
  • GBK / GB2312 / GB18030:中国⾃研标准,多字节,字符集 + 编码

你可能感兴趣的:(加密、编码、Hash、字符集)