DAY6 web源码拓展
[小迪安全]学习与整理
加密算法&cdn&信息收集
常见加密编码等算法解析
MD5,SHA,ASC,进制,时间戳,URL,BASE64,Unescape,AES,DES 等。
MD5:
Hash
算法一类。
对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码)。
不可逆
。
压缩性
:任意长度的数据,算出的MD5值长度都是固定的。
容易计算
:从原数据计算出MD5值很容易。
抗修改性
:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
弱抗碰撞
:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
强抗碰撞
:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
SHA(安全散列):
1.SHA-1生成160比特的散列值,生成速度比MD5慢,但更为安全
2.另外四种变体:SHA-224,SHA-256,SHA-384,SHA-512,并称为SHA-2
时间戳:通常是用在用户的注册、登录、注销等情况。
URL:
序号 | 特殊字符 | 含义 | 十六进制值 |
---|---|---|---|
1 | + | URL 中+号表示空格 | %2B |
2 | 空格 | URL中的空格可以用+号或者编码 | %20 |
3 | / | 分隔目录和子目录 | %2F |
4 | ? | 分隔实际的 URL 和参数 | %3F |
5 | % | 指定特殊字符 | %25 |
6 | # | 表示书签 | %23 |
7 | & | URL 中指定的参数间的分隔符 | %26 |
8 | = | URL 中指定参数的值 | %3D |
BASE64:随着编码的文本增加而增加、由大小写和数字组成且字符结尾一般有两个等号。(一般在代码中为了安全会使用base64进行编码)
Unescape:一般是%U+四个数字对应着两个字符、主要运用于网站web应用。
AES:
- 以8字节为单位,明文分组长度为16字节(128比特)
- 高级加密标准,代替DES的加密标准
- 支持128位、192位、256位秘钥长度,分别需要操作10、12、14轮,每轮秘钥长度都是16字节(128比特)
算法大致分为四个部分
- 字节替换
- 行移位置换
- 行混淆替换
- 轮秘钥加(XOR运算)
图是AES-128加密算法的实现过程。
首先将明文以字节形式存储在4乘4的矩阵中。
在算法开始时进行初始变换,就是将明文矩阵与轮密rk[0]数组之间逐字节的做异或运算。
接着进入主循环,进行10轮迭代。
第1轮到第9轮的迭代都需要经过4个步骤,分别是字节替换、行移位置换、列混淆替换和轮密钥加。
最后第10轮进行字节替换、行 移位置换和轮密钥加3个步骤。
其中,字节替换是用一张称为S盒子的固定表来执行字节到字节的替换。行移位置换是将行和行之间执行简单的置换列混潜替换是将列中每一个字节替换成该列所有字节的一个函数,可以通过查表实现。轮密钥加是用当前的数据块和轮密钥进行简单的异或运算。经过10轮选代后的输出就是最终的密文了。解密过程就是对上述过程进行逆运算。显然AES的数据长度、密钥长度都比DES和3DES要长,且它的安全性也比它们高。
DES:
- 使用16轮操作的Feistel结构密码
- 分组长度为64位
- 使用56位的密码
- 每一轮使用48位的子秘钥,每一个子秘钥都是由56位的秘钥的子集构成的。
算法大致分为四个部分
- 初始置换
- 迭代
- 逆置换
- 子秘钥生成
首先将64
位为一组的明文输入进行初始置换,即不使用密钥的比特重排。
接着将明文划分为32
位一组的左半部分和右半部分,使用48
位的子密钥对右半部分进行F函数
作用,再与左半部分异或
得到下一轮的右半部分。
然后,按照同样的运算方式采用不同的子密钥迭代16轮
。
最后将迭代获得的左半部分和右半部分进行初始置换的逆操作
输出密文。
这个过程中,每个48位的子密钥都是由56位密钥产生。
每轮法代中F函教的详细操作是这样,32位的右半边部分经过扩展置换扩展为48位,这个结果与48位子密销按位异或。接着,s盒将48位压缩为32位。然后,对s盒的输出进行P置换。
F函数是DES算法安全性的决定因素,而s盒是F函数的关键,所以s盒是DES算法的核心。
DES算法综合应用了置换、替换等多种密码技术。
在算法结构上采用了Feistel(菲斯特尔)结构,结构紧凑,便于实现。
但是DES算法密钥数太短,影响了保密性,穷举攻击的代价小。
为了加密的安全性,一是加大数据段的长度,二是需要加大加密运算过程的复杂性,三是加大密钥的长度。
常见加密形式算法解析
直接加密,带 salt,带密码,带偏移,带位数,带模式,带干扰,自定义组合等。
常见解密方式
- 枚举
- 自定义逆向算法
- 可逆向
了解常规加密算法的特性
长度位数,字符规律,代码分析,搜索获取等。