| 关键词: 字母表 nbsp 字母 密码 明文 密文 单元 加密 密码学 一生一世 |
P.S. 由于所有文章是从密码学的角度来解释的, 所以一些名词会和当今常用的名词的意思不太一样, 请注意这一点. 如 : 1.明码--通过密匙-->得到密码. 这里的密码也就是密文的意思. 2.字母表:明密文中的单个字母单元所属的表. 这里的字母不是一般说来的abcd等,它可能是8位的,16位的,32位的,也可能只是某一部分字母比如A~Z. ... ... OK, 进入正题: 密码学入门系列(一) 之 移位密码(古典): 移位密码简介: 移位密码最早可追溯至古罗马时期, <<高卢战记>>有描述恺撒曾经使用密码来传递信息,即所谓的"恺撒密码",它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E.这是一种简单的加密方法,这种密码的密度是很低的, 只需简单地统计字频就可以破译, 现今又叫"移位密码", 只不过移动的为数不一定是3位而已. 虽然移位密码非常简单, 但它是我们走向更高深的密码的基础, 因此以下基础知识还是希望大家能仔细看看. 在详细介绍之前, 我们有必要知道一些密码学所需的数学知识. 1.字母表:明密文中的单个字母单元所属的表. 比如如下 Z26:很常用的基于26个英文大写字母的字母表. 这里从0开始,25结束来标志其值, 而不是使用其ASCII值,目的是为了使计算更加方便. A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 如明文JACKOZOO的码值即为:9 0 2 10 14 25 14 14 . 每个字符占字母表中的一个字母. Z2~8: 也即Z256. 这是很常用的一类字母表, 也即大家经常使用的字节流加密. 字母表从00~FF共2的8次个字母元素. 如明文JACKOZOO的码值(ANSI编码)即为4A 41 43 4B 4F 5A 4F 4F . 明文爱你一生一世(ANSI编码)的码值即为B0 AE C4 E3 D2 BB C9 FA D2 BB CA C0 . Z2~16:也即Z65536. 此字母表常用于字流加密. 字母表从0000~FFFF共2的16次个字母元素. 如明文JACKOZOO(ANSI)的码值为: 4A41 434B 4F5A 4F4F . 共占4个字母单元. 明文爱你一生一世(ANSI)的码值为: B0AE C4E3 D2BB C9FA D2BB CAC0. 共占6个字母单元. Z2~32 : 字母表从00000000~FFFFFFFF共2的32次个字母单元. 常用于双字流的加密. 如明文JACKOZOO(ANSI)的码值为: 4A41434B 4F5A4F4F . 共占2个字母单元. 明文爱你一生一世(ANSI)的码值为: B0AEC4E3 D2BBC9FA D2BBCAC0. 共占3个字母单元. 附注: 上述的所谓字节流,字流,双字流仅仅是相对于你加密时所选取的字母表而言的, 因为任何信息在计算机中都是以二进制流存放的. 2.模n加与模n乘: 命n为正整数,且字母表Zn = {0,1,2 ... n-1}. a,b属于Zn, 则定义a+b mod n 为a和b的模n加. 同理有ab mod n 为a 和 b 的模n乘. 移位密码: 移位密码体制(Caesar Cipher)的原理可用a+b mod 26 做简介刻画. 设移位密码体制中有: 明文: IAMJACKOZOO 秘匙: K = 2 密文: KCOLCEMQBQQ 其中的密文的每个字母单元是由明文在字母表内循环右移3位所得 . 这一加密法则可概括为: y = (x+3) mod 26 . x,y ∈Z26. x为密文, y为明文. 我们小结一下, 移位密码中有如下概念: (这是针对Z26字母表) 1) 明密文字母表 Z26 2) 秘匙K = a 属于Z26 3) 加密变换 y = (x+a) mod 26 , x,y ∈ Z26 4) 解密变换 x = (y-a) mod 26 , x,y ∈ Z26 我们来看一个例子: 例1:已知移位密码中明文为HIJACKOZOO, 字母表为Z26,秘匙为K=9,请加密之. 解 :由字母表Z26得HIJACKOZOO 的码值为: 7 8 9 0 2 10 14 25 14 14 (共10个字母单元) 对其每个字母单元做y = (x+k) mod 26 运算得: → 16 17 18 9 11 19 23 8 23 23 因此得密文为: → QRSJLTXIXX 例2:已知移位密码中明文为爱你一生一世, 字母表为Z2~8, 秘匙为0x99, 请加密之. 解 :由字母表Z2~8得爱你一生一世的码值为: B0 AE C4 E3 D2 BB C9 FA D2 BB CA C0 (共12个字母单元) 对其每个字母单元做 y = (x+k) mod 0x100 运算得: → 49 47 5D 7C 6B 54 62 93 6B 54 63 59 因此得密文为: IG]|kTb搆TcY. 由于密码学中会用到很多的数学知识, 而很多的数学符号我们使用键盘很难输入进去, 比如∑,∈,∫∮≡≌≈等,但这些符号 我是怎么弄上来的了? 其实是很笨拙的方法. 我是通过生成一个文本, 在从里面复制我想要的字符.不同语言的系统能显示的字符数是不一样的. 代码如下: 代码: 移位密码的理论讲解就到这里, 虽然内容很简单, 但我还是尽量说的详细些.希望可以照顾到基础不太好的朋友. |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|