置换密码又称换位密码,是一种基于字符顺序调换的古典加密方法,属于字符变换型密码算法。其核心特征为保持明文字符不变,仅通过调整排列位置生成密文。栅栏密码就是一种置换密码。
所谓栅栏密码,就是把要加密的明文分成k栏,然后把每栏连起来,形成一段无规律的话。不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。
加密:1、把将要传递的信息中的字母交替排成上下k栏(这里k=2)。
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
2、 密文:将下面一行字母排在上面一行的后边。
TEOGSDYUTAENN HLNETAMSHVAED
解密:
先将密文分为k栏这里(k=2)。
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的顺序组合成一句话
明文:THE LONGEST DAY MUST HAVE AN END
有限集 X 上的运算满足σ:X → X 是一个双射函数,那么称 X 是一个置换
若 σ 是一个置换,∀x∈X ,存在唯一的x′∈X,使得σ(x)=x′。同理可定义逆置换σ′: X → X 。
设有集合 X = {1, 2, 3, 4, 5, 6, 7, 8} ,
σ(1) = 2 ,σ(2) = 5,σ(3) = 3,σ(4) = 6, σ(5) = 1,σ(6) = 8,σ(7) = 4,σ(8) = 7。
则置换为σ={2 3 3 6 1 8 4 7}。
因为置换可以简单用对换表示,所以上述置换 σ可以形式化为表示为对换的乘积,即
σ=(125)(3)(4687)=(125)(4687),其逆置换σ′=(152)(4786)。
置换密码:设 n 为正整数, M, C, K 分别为明文空间、密文空间和密钥空间。则K 是定义在 {1, 2, ..., n} 的所有置换组成的集合。对任何一个密钥 q ∈ K,即任一个置换,定义置换密码为eσ(x1, x2, ..., xn) = (xσ(1), xσ(2), ..., xσ(n))
dσ-1(y1, y2, ..., yn) = (yσ-1(1), yσ-1(2), ..., yσ-1(n))
其中,σ-1 是 σ 的逆置换,密钥空间 K 的大小为 n!。
周期置换密码是将明文 P 按固定长度 m 分组,然后对每组的字符串按 (1, 2, …, m) 的置换 σ 重新排列位置从而得到密文。解密时同样对密文 c 按长度 m 分组,并按 σ 的逆置换 σ⁻¹ 把每组重新排列,从而得到明文 P。
不妨设明文 P 为“Digital Copyright Protection Laboratory, Beijing University of Printing”,σ = (1 5 6 2 3)。
首先把明文 P 分成 6 个字母一组为
(Digita) (lCopyr) (ightPr) (otecti) (onLabo) (ratory) (Beijin) (gUnive) (rsityo) (fPrint) (ing )
然后分别对每组中的 6 个字母使用加密变换 σ 为
(gaiiDt) (orCply) (hrgtiP) (eitcot) (Lonaob) (tyaorr) (inejBi) (neUigv) (iostry) (rtPifn) (g n i )
从而得到最终的密文 c = “gaiiDtOrCplyhrgtiPeitcotLonaobtyaorrinejBineUigviostryrtPifng n i ”。
同理,解密与加密类似,由加密置换 σ = (1 5 6 2 3),得到解密置换 σ⁻¹ = (1 3 2 6 5)。将密文序列分成6个字母一组为
(gaiiDt) (orCply) (hrgtiP) (eitcot) (Lonaob) (tyaorr) (inejBi) (neUigv) (iostry) (rtPifn) (g n i )
接着对上述序列中的每个子串使用解密密钥置换位置为
(Digita) (lCopyr) (ightPr) (otecti) (onLabo) (ratory) (Beijin) (gUnive) (rsityo) (fPrint) (ing )
从而得到明文序列 P 为“Digital Copyright Protection Laboratory, Beijing University of Printing”。