令Z_10 = {0,1,2,3,4,5,6,7,8,9}
我在这里有一个对称加密方案,其中
消息M = M[1]M[2]M[3]M[4]在Z_10中,是一个四位字符串,
密钥π <- Perm(Z_10)是Z_10上的随机排列,
密文C = C[1]C[2]C[3]C[4] = E_π(M)在Z_10中,计算如下:
Alg E_π(M)
For i=1,...,4 do
P[i] <- (M[i] + i) mod 10
C[i] <- π(P[i])
Return C
这是正确的解密算法吗?
Alg D_π(M)
For i=1,...,4 do
P[i] <- (C[i] - i) mod 10
M[i] <- π^(-1)(P[i])
Return M
我相信这是一个替换密码,但我不确定。这是一个替换密码吗?我们怎么知道的?
加密算法中似乎有一个错误:您要么需要mod 11
,要么更可能需要Z_10 = {0,...9}
。否则,操作
P[i] <- (M[i] + i) mod 10
将0
和10
转化为1
,使其不可逆。
除此之外,是的,根据定义,它是一个替换密码,因为输入字母表的每个字符总是被相同的相应输出字符替换。您甚至可以用表替换加密逻辑。
您还需要反转解密部分中操作的顺序:首先反转排列,然后是模加法。