zoukankan      html  css  js  c++  java
  • 密码学-学习笔记

    密码学笔记

    凯撒密码

    最早的密码实例之一是凯撒密码。尤里乌斯.凯撒(Julius Caesar)在其作品《高卢战记》中首先介绍。密码中从A到W的每个字母在加密时用字母表中位于其后三位的那个字母代替,字母X,Y,Z则分别被替换成A,B,C。

    凯撒对字母进行了3移位,但从1到25中的任意数的移位都能产生类似的效果。任一种移位现在通常都被视为使用了凯撒密码。

    外面的环可以自由转动。如果从外环的字母A对应于内环的A开始,经2次移位外环的C就到了内环A处。共有26中移位方式。其加密密钥与解密密钥都是用来移位数来决定的。

    利用凯撒轮作为工具对凯撒密码的描述可以改换成用数学的方式来定义。我们注意到26移位与0移位是相同的。这是因为26移位恰是凯撒轮旋转了一整圈。这一推理可以应用至其他移位,即任一移位等价于0到25之间的某个数的移位。例如37移位,是通过凯撒轮转一整圈然后再经过11移位得到。那么37移位等价于11移位,这种说法就可以写成37=11(mod 26)

    这就是使用了模26的算术,其中26称为模。模算术-除了26以外还有很多其他的模,在一些密码学领域里起着关键作用。

    凯撒密码有时也称为加法密码。只需以如下方式为各个字母分派一个整数值:

    A=0,B=1,...,Z=25

    用y移位的凯撒密码进行加密,就是用数x+y(mod 26)来替代数x。例如N是字母表中第14个字母,所以N=13。用15位移对N加密,那么x=13,y=15。加密后的N是13+15=28=2(mod 26),所以N就被加密成了C。

    简单代换密码

    制作一个简单代换密码,可以在一个严格按字母顺序排列的字母表下面,写下一个按随机顺序排列的字母表。

    该密码的加密密钥与解密密钥是相同的,就是粗体字母的次序。加密规则是“将每个字母替换为位于它下面的字母”,解密规则是相反的程序。

    简单代换密码的密钥个数,等于字母表中26个字母可按不同顺序排列的方法数,它被称为26的阶乘,记为26!,也就是 26*25*24*...*3*2*1。等于

    没有人会用穷举搜索法去寻找密钥。

    问题1,很难记住

    问题2,如果被看见或偷去,就会危及这个系统的安全。

    为了避免这种风险,使用者试图找到能够产生容易记忆的密钥的方法。

    一种常见的方法是:想出一个密钥短语,去掉所有重复字母,让它们作为密钥的开头,然后按字母表的顺序加上尚未出现过的字母,使之扩展成完整的密钥。

    例如,设密钥短语为“We hope you enjoy this book”,去掉重复字母后即变为"wehopyunjtisbk",那么密钥就是

    显然当限制密钥只能从密钥短语中导出时,密钥的数目会大大缩减,因为在26!种可能的简单代换密钥中,相当大的比例是不可能由一个英文短语用上述方式导出的。

    第二个问题是:很可能存在许多不同的密钥将同一信息加密成同一密文的情况。

    例如:信息为“MEET ME TONIGHT”,使用上面密钥加密则密文为:"FTTP FT PREYZSP"。

    但是这种密钥个数多达:18!=6,402,373,705,728,000

    普莱费尔密码

    普莱费尔密码是查尔斯.惠特斯通(Charles Wheatstone)爵士与莱昂.普莱费尔(Lyon Playfair)男爵于1854年发明的,在英国战争部一直使用到20世纪初,包括在布尔战争期间。它是“双字母组”密码的一个例证,意味着字母是成对而不是单个加密的。密钥是一个5行5列的方阵(内含25个字母,即在字母表中删去J之后剩下的字母),密钥个数达到25!

    在用普莱费尔密码加密之前,信息必须稍稍重新排列一下,方法如下

    1.用I代替J

    2.将信息写成字母对的形式

    3.避免出现同样的字母组成的字母对,如果出现,则在他们之间插入Z

    4.如果写出的字母个数是奇数,则在结尾处加上Z

    为了解释该密码运作方式,选取一个具体的密钥

    一旦信息得到了适当的重新排列,便给出了加密规则。将原来的密钥扩充为6*6.第六行与第一行相同,第六列与第一列相同。

    加密规则如下:

    1.如果两个字母位于密钥的同一行,则每个字母都替换为扩充后的密钥中位于它右侧的字母

    2.如果两个字母位于密钥的同一列,则每个字母都替换为扩充后的密钥中位于它下方的字母

    3.如果两个字母既不在同一行,也不再同一列,则第一个字母替换为与它同行,但列数与第二个字母相同的字母,第二个字母替换为与刚使用过的三个字母形成矩阵的那个字母

    加密下面的信息:GOOD BROOMS SWEEP CLEAN

    信息中没有字母J,只须在用字母对的形式写这条信息时适当地加入字母Z,便得到

    GO OD BR OZ OM SZ SW EZ EP CL EA NZ

    根据加密规则,全部密文变为

    FP UT EC UW PO DV TV BV CM BG CS DY

    解密规则与加密规则相反。

    例如:解密MBOUBTZE

    解为:BOREDOMZ

    同音异词编码

    改进简单替换密码,使得明文中诸如E这样的字母能用不止一个密文符号来表达。

    每个密文数字仅代表唯一一个明文字母,但字母A,E,N,O,R,T中任何一个都由两个不同的数字来代表。

    THEETH这个有两对重复字母的词,可以写成24 27 13 08 31。

    维热纳尔密码

    利用维热纳尔方阵来进行加密。这个方阵最坐标(密钥)列是英文字母表,对此列的每一个字母,与它相对应的哪一行是字母表的一个循环,并以该字母为循环的起始字母,与它相对应的哪一行是字母表的一个循环,并以该字母为循环的起始字母。

    最左边这列上的每个字母实际上都对应着一个凯撒密码,其移位由该字母所确定。

    设计密码最常用的一个方法是选择一个无重复字母的密钥词或短语。如果明文信息比密钥词长,那么就重复密钥次数视需要而定。

    例如当信息是PLAINTEXT而密钥词是fred时,得到

    下面利用该方阵来加密这条信息

    加密字母P,要用位于它下面的密钥字母f,从f对应的哪行中读取出位于P下方的字母,即U。

    密文为:U C E L S L I A Y 

    换位密码

    基于改换字母书写次序的密码。

    密钥是一个很小的数。用5作为密钥,在利用这个密钥加密信息时,先将信息按4个字母一行写好,加密时则从第一个列字母开始写,然后写第二列字母。如果这个信息的长度不是5的倍数,那么加密前需要在信息的末端加上适当个数的Z。

    比如,加密WHAT WAS THE WETAHER LIKE NO FRIDAY

    因为密钥是5,加密过程的第一步是将信息写为5个字母一行的形式

    然后依次按列的顺序读下密文

    WAWEEIHSERODATALANATHTIFYWEHKRZ

    超级加密

    组合两个或多个弱的密码可以得出比原来任一个都强的密码。称为超级加密。

    不可破译的密码

    通信这所能指望的最好结果是当第三方设法拦截时,其拦截到的东西不能给他们带来任何有助于了解信息真实内容的情况。密码系统应该博士截获密文的人仍要去猜测信息的内容。

    达到上述目的的系统即可被认为提供了完全保密

  • 相关阅读:
    c# 调用DeepAI
    c#
    c# Polygon 画多边形,
    WPF BitmapSource /BitmapImage 获取像素点颜色
    前端面试题汇总
    element 动态合并表格
    JS的乘、除、加、减法结果会有误差,在两个浮点数相乘的时候会比较明显
    shell中针对数字、filename字符串等的判断参数的总结
    Android TV : 电视输入框架(TIF)剖析
    ubuntu更新系统函数手册
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312719.html
Copyright © 2011-2022 走看看