热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

密码学中的各类密码汇总(二)

接下来汇总下换位密码(transpositioncipher):Performsomesortofpermutationontheplai

    接下来汇总下换位密码(transposition cipher):

      Perform some sort of permutation on the plaintext letters(明文的某种排列);

      Works on blocks of letters of the plaintext(作用于明文块).

    通常来讲,设明文集为M,密文集为C,明文块长t,K则是 {1,2,...,t} 的某种排列(仅是换位,无元素改变),

      Each e∈K,m∈M,c∈C

      E_{e}(m) = m_{e(1)}m_{e(2)} ... m_{e(t)};

      D_{d}(c) = c_{d(1)}c_{d(2)} ... c_{d(t)}.

1、Rail fence cipher (栅栏密码):

    Plaintexts are written as a sequence of diagonals, then read off as a sequence of rows.

    先将明文按对角线排列,然后按行写出。

    For example:

    (1)

    明文:MEET ME

    栅栏深度为2(with a rail fence of depth 2):


M E M 
 E T E

    密文为:MEMETE

    (2)

    明文:WE ARE DISCOVERED

    栅栏深度为3(with a rail fence of depth 3):


W   E   C   R  
 E R D S O E E 
  A   I   V   D

 

    密文为:WECRERDSOEEAIVO

    (3)

    密文为:TEKOOHRACIRMNREATANFTETYTGHH 

    密钥为4(key = 4)

  (共28个元素,4层深,即构建一个4行28列的表格,然后按规则填充即可)


T     E     K     O     O   
 H   R A   C I   R M   N R  
  E A   T A   N F   T E   T 
   Y     T     G     H     H

 

    明文为:THEY ARE ATTACKING FROM THE NORTH

2、Rotating (turning) grilles (旋转格栅密码):

    格栅由两份正方形网格组成,网格1用于书写;网格2部分格子被剪掉,用于旋转。网格的材质可以是纸卡或者其他材质。

    加密的时候,被剪切的网格2用约定好的方式(逆时针或顺时针)旋转90度,依次填充明文。

    下图展示了明文“thelordismyshepherdIshallnotbeinwant”加密的全部过程(格栅是一个6乘6的正方形网格,其中九个格子被剪掉了):

                            

    加密步骤:

    (1) 明文的前九个字母( t,h,e,l,o,r,d,I,s )从左到右,从上到下一个接一个地写在每个被切掉的格子中;

    (2) 网格2沿预定方向(在例子中为逆时针方向)转动90度;

    (3) 将接下来的九个字母( m,y,s,h,e,p,h,e,r )以同样的方法写入网格1;

    (4) 再次转动网格2和书写随后的九个字母,然后继续,直到网格1填满字母;

    (5) 只需要按照从左到右、从上到下写的方式抄下字母,即为密文:

         mtdhyeisthlbehoeapirhldnelwrainnostt.

         然后将密文写入6乘6格栅中:


mtdhye
isthlb
ehoeap
irhldn
elwrai
nnostt

    解密步骤:

    (1) 如果要解密旋转格栅密码,解密用的网格2要与加密时使用的网格2完全相同;

    (2) 解密者可以通过剪切得到网格2,阅读前九个明文字母( t,h,e,l,o,r,d,I,s ),然后将格网格2转90度后,可以读取接下来的9个字母,依此类推。

    注意:当加密时,每次转动网格2时,切掉的格子都会被精确地定位在尚未填充字母的格子处。为了达到这种的效果,应该仔细选择要切割的格子,尺寸要精确。

    下图显示了此过程:

                                                                                  

    (1) 将方格划分为4个3X3的大正方形网格,每个大正方形的九个网格以相应的方式编号为1 - 9;

    (2) 在编号为“1”的四个大正方形网格中,选择一个小正方形网格进行裁剪。在上面的示例中,顶部行的最右边的小正方形网格被剪掉,这保证了编号为“1”的四个大正方形中的每一个网格在由该特定剪切网格加密期间正好出现一次。

    (3) 类似地,选择编号为“2”的四个大正方形中的一个小正方形以将其剪切。因此,通过从具有相同数目的四个正方形中精确地选择一个要被切出的正方形,可以确保每个正方形可以填充在四个旋转位置之一的位置。

    也许大家会觉得6X6的格栅太小,事实上,格栅的大小是没有上限的,亚历山大·汉密尔顿文献中那份格栅的尺寸就是26X26。

    如果将格栅换成10000X10000呢?那加密的信息将变得极难破解。

3、Multiple-stage columnar transposition cipher (多级列位移密码):

    (1) Columnar transposition cipher (列位移密码):

         Write messages in a rectangle, row by row; read messages off, column by column; permute the order of the column.

         意思就是,将明文按行写成矩形(明文不够可以填充),然后改变列的顺序。

    For example:


Key4312567
Plaintextattackp
 ostpone
 duntilt
 woamx填y充z位

 

    Ciphertext: ttnaaptmtsuoaodwcoixknlypetz

    注意:纯换位密码容易被攻破,因为密文与明文有相同的字母频率。

    (2) Multiple-stage columnar transposition cipher (多级列位移密码):

         More than one stage of transposition.

    For example: 列位移密码使用多次Key进行换位。

    至此,换位密码也汇总的差不多了,that's all, good luck!

    借鉴:http://www.tuilizui.cn/thread-1331-1-1.html

 


推荐阅读
author-avatar
沈丶小浪_171
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有