Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions Homework/1Team/loading2772/20180118-01.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# 对称密码
## 一次性密码本
>一次性密码本是密码学中的一种加密算法。是以随机的密钥(key)组成明文,且只使用一次。原理就是:将明文和一串随机的比特序列(KEY)进行XOR运算得到密文。解密就是加密的反向运算,也就是说,用密文和密钥进行XOR运算,就可以得到明文。
##DES
DES是将64比特明文加密成64比特密文的对称密码算法,它的密钥长度为56比特,在密钥中每隔7比特就会插入一个用于错误检查的比特,所以一共64比特。<br>
DES是以64比特明文为一个单位来进行加密的,这64比特的一个单位成为一个分组,所以DES也是分组密码的一种。DES每次只能加密64比特的数据,如果加密的明文比较长就需要对DES加密过程进行迭代,迭代的加密方式称为模式,详见分组密码。
>其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。
<pre>其置换规则见下表:
57,49,41,33,25,17, 9,1,
58,50,42,34,26,18,10,2,
59,51,43,35,27,19,11,3,
60,52,44,36,28,20,12,4,
61,53,45,37,29,21,13,5,
62,54,46,38,30,22,14,6,
63,55,47,39,31,23,15,7,
64,56,48,40,32,24,16,8,</pre>
## DES解密
DES的解密可以使用和加密完全相同的结构,只需要按照相反的顺序来使用子密钥就可以了。
## 三重DES
三重DES(3DES)就是将DES重复三次得到的一种密码算法。明文经三次DES处理才会变成密文,由于DES的密钥是56比特,所以3DES的密钥长度是168比特。三重DES的加密过程是“加密->解密->加密”。
三重DES的解密过程,刚好和加密过程相反,是执行“解密->加密->解密”的操作。
# 分组密码
分组密码算法实际上就是密钥控制下,通过某个置换来实现对明文分组的加密变换。为了保证密码算法的安全强度,对密码算法的要求如下。<br>
<ul>
<li>分组长度足够大</li>
当分组长度较小时,分组密码类似于古典的代替密码,它仍然保留了明文的统计信息,这种统计信息将给攻击者留下可乘之机,攻击者可以有效地穷举明文空间,得到密码变换本身。<br>
<li>密钥量足够大</li>
分组密码的密钥所确定密码变换只是所有置换中极小一部分。如果这一部分足够小,攻击者可以有效地穷举明文空间所确定所有的置换。这时,攻击者就可以对密文进行解密,以得到有意义的明文。<br>
<li>密码变换足够复杂</li>
使攻击者除了穷举法以外,找不到其他快捷的破译方法。
</ul>

> 分组密码算法只能加密固定长度的分组,若要加密超过分组密码长度的明文,就需要对分组密码进行迭代,迭代后的最后一块数据需要使用合适的填充方式将数据扩展到与分组长度相等的长度。这种迭代的方法我们称为分组密码的模式。<br>分组密码的模式主要有下列5种:<br>ECB(Electronic CodeBook mode):电子密码本模式 <br>CBC(Cipher Block Chaining mode):密码分组链接模式 <br>CFB(Cipher FeedBack mode):密文反馈模式 <br>OFB(Output FeedBack mode):输出反馈模式 <br>CTR(CounTeR mode):计数器模式

# 公钥密码
公钥密码中,密钥分为加密密钥和解密秘钥两种。加密密钥一般是公开的,称为公钥。解密秘钥由自己保存绝不公开,称为私钥。公钥和私钥统称为密钥对
## RSA
- 加密:密文=明文^E mod N
- 解密:明文=密文^D mod N (a^c表示a的c次方)。
- 公钥:(E,N); 私钥:(D,N)<br>
如何生成密钥对呢???
```
1.生成N
N=p* q(p,q是两个非常大的质数)
2.生成L(L是生成秘钥对过程中使用的数)
L=lcm(p-1,q-1) (L是p-1和q-1的最小公倍数)
3.生成E
1<E<L gcd(E,L)=1(E,L的最大公约数为1)
检查E,L的最大公约数是否为1,可以用辗转相除法求公约数。
4.生成D
1<D<L
E* DmodL=1
```
## 中间人攻击

中间人攻击是一种针对机密性的有效攻击。攻击者混入发送者和接收者之间,对发送者伪装成接受者,对接收者伪装成发送者。
## MD5
MD5即信息摘要算法第五版。是一种有广泛应用的哈希函数。用来提供消息的完整性保护。他能够对消息产生128比特的散列值。<br>
MD5是一种不可逆的算法,通过信息摘要算法得到的信息是不完整的,所以也不能得到原始数据。
MD5以512比特信息分组来处理输入的信息,每一个分组又被划分成16组32比特分组。经一系列的算法变化得到4个32比特分组,这个四个32比特分组生成128比特的散列值。<br>
在网上经常会看到32位和16位的MD5值,两者是有部分相同的,32位的MD5值去掉前八位和后八位就是16位了。<br>
MD5算法具有以下特点:
> 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。<br>
2、容易计算:从原数据计算出MD5值很容易。<br>
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。<br>
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。<br>

[MD5参考](http://blog.csdn.net/xiaofengcanyuexj/article/details/37698801)<br>
[CTF中那些脑洞大开的编码和加密](http://www.360doc.com/content/16/0906/21/27425026_588911412.shtml)<br>
[CTFtools](https://www.ctftools.com/)