# 常见算法特征总结

## 算法的类别：

取数据摘要的算法（MD5, SHA\*）

对称加密的算法(AES,DES) （核心算法就是各种复杂的位异或）

非对称加密算法（RSA）(私钥，公钥)

## 数据摘要算法（MD5,SHA\*）

由三个方法组成:1.初始化 2.运算 3.取结果

![](https://1832246008-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LckC1dmB2Mb2F1Bgx_H%2F-LezZ4XYP85T3Z_Slsk7%2F-Lez_AnKduKjIYny6Ed0%2F1.jpg?generation=1557992359207762\&alt=media)

进入第一个块（初始化方法），可以看到各种算法的固定常量：

MD5有四个固定常量。SHA1算法又5个固定常量。SHA256算法有8个固定常量。

常见表现形式如下：

![](https://1832246008-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LckC1dmB2Mb2F1Bgx_H%2F-LezZ4XYP85T3Z_Slsk7%2F-Lez_AnM1FBzS22Al6ZQ%2F2.jpg?generation=1557992359146014\&alt=media)

## RC4算法的特征：

有两个256次循环

## Base64算法特征:

Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。转换的时候，将 3 字节的数据，先后放入一个 24 位的缓冲区中，先来的字节占高位。数据不足 3 字节的话，于缓冲器中剩下的比特用 0 补足。每次取出 6 比特（因为 {\displaystyle 2^{6}=64}），按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出，直到全部输入数据转换完成。

**通常而言 Base64 的识别特征为索引表，当我们能找到 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 这样索引表，再经过简单的分析基本就能判定是 Base64 编码。**

## AES算法特征：

一般AES的密钥长度是128bit 或 256bit，加密出来的数据是128或256的整倍数。

一般情况下密钥都是16字节。

AES的密钥不需要进行初始化，都是直接传明文密钥进来。

方法内有很多复杂的位异或xor。

验证方法:用 hook取得明文传入的密钥，然后经过算法验证是否为AES算法。

如果是CBC算法的，还会拥有一个16字节的IV

## DES算法特征：

密钥长度固定8字节。

密钥需要单独初始化，需要运行一个密钥初始化函数。

会每8字节分段加密。

CBC方式会自带8字节分段加密，ebc方式需要在外面手动分段。

## RSA算法特征：

非对称加密算法

密钥需要单独初始化

密钥长度一般很长，存储格式一般为base64文本

## ECC算法：

密钥需要单独初始化
