前言
个人学习整理笔记,希望能对后来者有所帮助。
提示:以下是本篇文章正文内容,下面案例可供参考
一、一次一密(One-time password)
一个序列密码称为一次一密必须满足以下条件:
- 通过真随机数生成器得到密钥序列s0,s1,s2,…
- 只有合法的通信方才知道密钥序列;
- 每个密钥序列位si仅适用一次。这意味着每个明文位都需要一个密钥位,因此,一次一密的密钥长度必须和明文长度一样。
一次一密是无条件安全的。
实例:假设发送方要发送“short"这个单词给接收方。
发送方:
-
使用ASCII编码来转换 “short”这个词,转换后会得到下面这一串二进制信息:
0111001101101000011011110111001001110100 -
接下来你需要一个和上面二进制串长度完全一致的密钥,如:
0110010101101010001110010010011101100100 -
我们将这两组字符串进行XOR 运算,得到:
0001011000000010010101100101010100010000
发送方将这串数据发送给接收方
接收方:
接收方得到数据后将其与密钥进行XOR运算,得到发送方的数据,再利用ascii编码即可得到正确的信息。
二、DES算法
DES(Data Encryption Standard,数据加密标准)是一种使用56位密钥对64位长分组进行加密的密码。它是一种对称密码,即加密过程和解密过程使用相同的密钥。DES对明文中的每个分组的加密过程都包含16轮,且每轮操作完全相同,每轮采用的子密钥不同,并且所有子密钥ki都是从主密钥k中推到出来的。
DES加密
-
初始置换( I P IP IP)
对给定的64位明文,通过置换 IP 表重新排列,然后分成左右两个部分 L 0 L_0 L0 和 R 0 R_0 R0 ,每部分32位:
-
16轮Feistel结构迭代
L i = R i − 1 L_i=R_{i-1} Li=Ri−1