You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
题目背景
在密码学中,代换-置换网络(或译作置换排列网络,英语:Substitution-Permutation Network,缩写作 SP-network 或 SPN)是乘积密码和分组加密的一种,美国数学家克劳德·香农在1949年为了找到利用简单的代换-置换方式进行加密的安全加密方式,发明了代换-置换网络。本题希望你实现代换-置换网络加密,对输入的明文字符串进行代换-置换加密并打印输出。
代换-置换网络
代换-置换网络包括两个变换,分别记为 πs和πp。
πs:{0,1}l→{0,1}l
πp:{1,lm}→{1,lm}
都是置换,置换 πs 叫做S盒
,它用一个 l
Bit向量来替代另一个 l
Bit向量
换 πp 用来置换lm
个Bit
给定一个lm
Bit的二元串 x=(x1,…,xlm),可以将其看做m
个l
Bit字串 x1,…,xm的并联
因此 x=x1∣∣…∣∣xm,且对于 1≤i≤m ,我们有 x=(x(i−1)l+1,…,xil)
下面给出的代换-置换网络由Nr
轮组成,在每一轮我们先用异或操作混入该密钥,再用πs进行m
次代换,然后用πp进行一次置换
密码体制:设l
,m
和Nr
都是正整数, πs:{0,1}l→{0,1}l与πp:{0,lm}→{0,lm}均为置换
设 P=C=0,1,K∈(0,1lm)Nr+1 是由初始密钥K
用密钥编排算法生成的所有可能密钥编排方案之集
对一个密钥编排方案 K1,…,KNr+1,我们可以用下面的算法加密明文x
SPN(x,πs,πp,(Kl,…,KNr+1)w0←xforr←1toNr−1do⎩⎨⎧ur←wr−1⊕Krfori←1tomdov(i)r←πs(u(i)r)wr←(vπp(l)r,…,vπp(lm)r)uNr←wNr−1⊕KNrfori←1tomdov(i)Nr←πs(u(i)Nr)y←vNr⊕KNr+1output(y)注意:⊕
的意思是异或,上面S
盒的代换是分组代换,也就是10进制数字变成二进制,每组四个位置。
在上面的算法中,ur是第r轮对S盒的输入,vr是第r轮对S盒的输出。wr是由vr应用置换πp得到,然后ur+1由轮密钥Kr+1异或wr得到,最后一轮没有用置换πp。如果对密钥编排方案做适当修改并用S盒的逆来取代S盒,那么该加密算法也能用来解密。下面用一个特定的代换-置换网络来说明上面的一般性描述
设l=m=Nr=4,πs如下定义,这里输入 z 和输出 πs(z)都以十六进制表示(0↔(0,0,0,0),1↔(0,0,0,1),…,9↔(1,0,0,1),A↔(1,0,1,0),…,F↔(1,1,1,1))
πs(z)如下定义
z |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
πs(z) |
E |
4 |
D |
1 |
2 |
F |
B |
8 |
3 |
A |
6 |
C |
5 |
9 |
0 |
7 |
πp(z)如下定义
z |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
πp(z) |
1 |
5 |
9 |
13 |
2 |
6 |
10 |
14 |
3 |
7 |
11 |
15 |
4 |
8 |
12 |
16 |
为了叙述方便,我们命名了16个 S 盒,Sri(1≥i≥4,1≥≥4),它们都是基于同样的置换πs。下面给出代换-置换网络的密钥编排算法。我们以一个32比特的密钥 K=(k1,...,k32)∈0,132 开始。对轮数1≤r≤5,定义Kr是由K中从k4r−3开始的16个相邻比特组成的。
下面我使用该代换-置换网络来进行加密。所有的数据都用二元形式表示。
设密钥是:
K=00111010100101001101011000111111
则轮密钥如下:
K1=0011101010010100
K2=1010100101001101
K3=1001010011010110
K4=0100110101100011
K5=1101011000111111
设明文为:
x=0010011010110111
则加密x的过程如下:
w0=0010011010110111K1=0011101010010100u1=0001110000100011v1=0100010111010001w1=0010111000000111K2=1010100101001101u2=1000011101001010v2=0011100000100110w2=0100000110111000K3=1001010011010110u3=1011010101101110v3=1001111110110000w3=1110010001101110K4=0100110101100011u4=1010100100001101v4=0110101011101001K5=1101011000111111密文为:
y=1011110011010110
具体解释一下上面比较难以理解的由u到v的过程,这里分为四组,每组四个数字,分为四次进行S盒代换,一共代换16位,代换后的十进制数字再转成二进制数字填入v数组。
数据范围
输入
第一行和第二行输入各输入16个数字表示πs盒置换
第三行和第四行输入各输入16个数字表示πp盒置换
第五行输入密钥
第六行输入明文
输出
输出明文通过SPN加密后的结果
样例
样例解释
样例一就是上面举得例子