编码、加密、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的不同缩写方式

相关推荐
普通攻击往后拉8 小时前
Leetcode 206. 反转链表
算法·leetcode·链表
@syh.9 小时前
【贪心】矩阵消除游戏
算法·游戏·矩阵
可编程芯片开发9 小时前
基于零极点配置的PID控制系统simulink建模与仿真
算法
徐小夕10 小时前
开源!我用SQLite + DuckDB打造了一款可视化AI问数平台
前端·算法·github
Hrain-AI10 小时前
2026 企业 AI 智能体平台横评:8 大主流平台 7 维度实测对比
人工智能·算法·机器学习
Angel Q.11 小时前
因子分析和生成模型有什么关系?从“幕后因素”到“生成数据”
算法
FBI HackerHarry浩12 小时前
AI大模型开发V2第四阶段线性回归
人工智能·算法·线性回归
Jerry14 小时前
LeetCode 108. 将有序数组转换为二叉搜索树
算法
蓝斯49714 小时前
Diff算法的简单介绍
算法