编码、加密、Hash、序列化和字符集

移位式加密:可以定规则偏移几位。

替换式加密:

密钥:对照码表

加密算法:怎么替换成密文

解密算法:怎么替换成明文

对称加密

使用相同密钥,不同算法

原理:使用密钥和加密算法、使用密钥和解密算法

缺点:同一个密钥、建立加密通信前肯定要传输这个密钥,那么就容易泄漏。

经典算法:DES、AES

非对称加密

使用相同加密算法,只是密钥不同

原理:使用公钥加密、使用私钥解密,即自己持有公钥和私钥,但是公钥给对方用来加密的,私钥自己保管用来解密,即对方加密后也无法解密的,只有我自己有私钥才能解密。

(另外使用私钥加密,也是可以使用公钥解密的,即反着来也行,但是公钥是公开、私钥是保密的,正常是可以通过私钥计算出公钥的,所以不能反着来用)

经典算法:RAS、DSA

优点:可以在不安全的网络上传递你的公钥

缺点:计算太复杂、性能差点

数字签名

签名与验证:

这里对签名使用私钥加密,接收方再用公钥加密,就可以拿到签名和原始数据比较一致。别人不好伪造签名数据,因为不知道私钥,所以伪造的也就无法用公钥加密得到原始数据。这样就有了签名证明的作用。

中间人攻击: 不知道消息是否来自对方,还是中间人,此时进行签名验证,防止伪造,让你确认消息就是来自你要的那个人。

但是有个问题,上面传递了原数据,就是明文容易被偷窥,此时可以使用非对称加密这个原数据:

Base64

将二进制数据转换成由64个字符组成的字符串的编码算法(大小写字母52 + 数字10 + (+#))

原理:就是把原本一个字节中的按每6个bit编排,得到新的字符串。

用途:让原数据(比如图片)具有字符串所有的特性,可以传输、保存。

缺点:不安全、低效(因为6个bit当做一个字节了)

URL encoding

%百分号编码

将URL中的保留字符使用百分号进行编码

目的:消除歧义、避免解析误解

压缩和解压缩

压缩:减小存储空间

解压缩:还原,以便使用

序列化

把内存里对象,转换成字节序列的过程

反序列化:字节序列转成内存对象

Hash:不可逆运算得到,(不算是加密算法)

把任意数据转换成指定大小范围(通常很小)的数据

作用:摘要、数字指纹

经典算法:MD5散列算法、SHA1

实际用途:数据完整性验证、快速查找(hashCode()、hashMap)、隐私保护(密码)

为什么重写了equals方法,就要重写hashCode方法?

hashMap的key,是比较hashCode来判断唯一的。因为计算hashCode比equals快速匹配、性能好、粗略,如果hashCode相等,再比较equals。

如果equals比较相等,那hashCode一定相等,反之不一定。

彩虹表:对于常用的密码的对应hash表,容易被破解

此时可以给原始密码加盐、比如末尾固定加个33,那么算出来的hash值就不好在彩虹表中查找到。但是这个盐一般也比较复杂,这样也不会容易被破解。

对非对称加密的签名验证的完整版:先进行hash(减小数据大小)得到摘要,对hash值进行加密,得到签名后的摘要。这样全程得不到明文,不易泄漏。

字符集(一个数字和文字符号的Map)

含义:一个由整数向现实世界中的文字符号的Map,最熟悉的就是ASCII字符集

注意UTF-8和16都是Unicode字符集下面的两个不同编码规则的分支,比如数字01的不同缩写方式

相关推荐
ysa0510302 小时前
【板子】拓扑排序
c++·算法·图论·板子
算法备案代理3 小时前
宽带自动连接保姆级教程
算法
罗超驿3 小时前
双指针算法详解:从入门到精通(Java版)
算法·leetcode·职场和发展
m0_377062923 小时前
电池电量计库伦算法计算公式
算法
patrickpdx3 小时前
高联预赛中的高斯函数问题
算法
tkevinjd3 小时前
力扣300-最长递增子序列
算法·leetcode·职场和发展·动态规划·贪心
小李飞刀李寻欢4 小时前
DeepSeek V3 版本模型结构分析
算法·大模型·deepseek
某不知名網友5 小时前
C++ 七大排序算法完整讲解
java·算法·排序算法
:-)5 小时前
算法-希尔排序
数据结构·算法·排序算法
得物技术5 小时前
得物推荐系统诊断 Agent:从 “调接口” 到 “会思考”|AICon 演讲整理
人工智能·算法·架构