密码学基础知识(三)古典密码

说完了前面那些,想起个事,本系列依据内容主要来自《现代密码学》马春光编著。我就是学这本书的。

好了,古典密码就是古时候的密码,哈哈,逗你玩的,shannon的保密系统的通信理论发表前的都是古典密码,会在密码学简史中介绍这位牛人的。

学习古典密码学的意义:学习设计原理和分析方法

古典密码也是,俩门派:置换和代换,顾名思义,一个是换了个原来有的,一个是换了个原来没有的。学术点讲就是前者明文和密文空间一样,后者 不一样。你要是问我啥是明文空间和密文空间啊,我就呵呵。是M 和 C。m明文的集合,c密文的集合。对了明文有时候用p表示哦,plaintext。

置换密码就是列置换和周期置换两兄弟,倒序那个算捡来的吧。

列置换:顾名思义,操作及输出都是以列为单位。将明文以密钥长度为列数形成矩阵,按照密钥的顺序进行列选出,然后一列一列的输出。

列置换密码(距阵置换密码)

明文:ming chen jiu dian fa dong fan gong

密钥:yu lan hua

去掉密钥重复字母:yulanh,得出距阵列数为6;将明文按行填充距阵。

得到密钥字母顺序: 653142;

按列(依顺序)写出距阵中的字母。

密文:giffg hddn0 njngn cuaa0 inano meiog

解密:加密的逆过程;

周期置换:其实就是在列置换的基础上,进行行输出。

周期置换密码

  明文:mingchen jiu dian fa dong fan gong

  加密密钥:3421(i=1,2,3,4的一个置换f (i) =3,4,2,1)

  加密:将明文分组(4个字母一组),然后根据规定顺序变换

                    ming chen jiud ianf adon gfan gong

                      ngim enhc udij nfai onda anfg ngog

  密文:ngimenhcudijnfaiondaanfgngog

  解密密钥:4312(3412的逆置换)

没啥说的,直接来代换密码:

也是两个流派,单表替换和多表替换。

单表代换密码:一个密文字母表。加法密码(著名的凯撒密码就是)乘法密码和仿射密码。

主要说下仿射密码

f(mi)=ci=mj,j=k1i+k2 mod n ,i,ki,k2{0,1,...,n-1}

多表代换密码:多个密文字母表。Vigenere密码,Playfair密码和hill密码

主要说下Vigenere密码

Vigenere密码是周期代替密码

当周期为1时,就是单表代替密码(加法密码)。

用户钥:有限序列k =(k1,k2,…,kd)

工作钥:无限序列K=(K1,K2,…,Ki,…) ,是用户钥的

周期性(周期为d)扩展,即

Ki=ki mod d ,i =1,2,3,…

明文:M=m1m2…mi…ml

密文:C=c1c2…ci…cl

工作钥:K=K1K2…Ki…Kl

加密:ci=mi+Kimod n,其中n为明文字母表的长度

例:用户钥为cat,对明文“vigenere cipher”加密

M:          v           i            g           e           n           e           r           e           c            i           p           h           e           r

K:          c           a            t           c           a           t            c           a           t            c           a           t            c           a

C:          x            i            z           g           n           x           t           e           v            k          p           a           g           r

此例n=26;c:2,a:0,t:19

代数密码:vernam密码

模2加运算,为什么提这个密码呢,因为他有个特点,就是加密和解密变换相同,称为对合运算。加密时是模2加,解密时也是与密钥模2加。著名的DES也是对合运算。

古典密码的统计分析:

单表代换密码中明文的统计特性在密文中仍然体现,容易被破译。加法和乘法知道一个密文对应的明文就完了,仿射强点,两个。

统计字母出现频率就是一种统计分析方法。依照正常字母频率表逐个对照。

时间: 2024-10-11 04:16:48

密码学基础知识(三)古典密码的相关文章

20_Shell语言———VIM编辑器基础知识三之窗口属性定制、配置文件及查找替换功能

Vim编辑器可以让用户按照需求来定制一些使用属性. 一.窗口属性定义 1)显示行号 行号不是内容,只是用来帮助用户确认文本所在的行.在vim编辑器中,如果要显示行号,可以在末行模式下输入: set number 如果想关闭,则可以在功能名称前面加上no,即: set nonumber 命令可以被简写,如set number 可以简写为 set nu:set nonumber 可以简写为 set nonu. 注意,上述设定仅对当前vim的进程有效,一旦当前进程关闭,这些设定就会失效,如果要使设定永

密码学基础知识整理

最近在研究密码学加密,签名方面的东西.经过几天的学习对一些基础知识进行一下整理 PKI:PKI是Public Key Infrastructure的首字母缩写,翻译过来就是公钥基础设施,在X509标准中PKI为支持共有密钥管理并且支持认证.加密.完整性.可追究性服务的基础设施. CA:CA是 Certificate Authority首字母的缩写,翻译过来的意思是:证书认证授权机构,其主要作用是负责发放管理数字证书的具有权威性的第三方机构.CA通过证书证实他人的公钥信息,证书上有CA的签名.用户

计算机科学基础知识(三)静态库和静态链接

三.将relocatable object file静态链接成可执行文件 将relocatable object file链接成可执行文件分成两步,第一步是符号分析(symbol resolution),第二步是符号重新定位(Relocation).本章主要描述这两个过程,为了完整性,静态库的概念也会在本章提及. 1.为什么会提出静态库的概念? 程序逻辑有共同的需求,例如数学库.字符串库等,如果每个程序员在撰写这些代码逻辑的时候都需要自己重新写那么该是多么麻烦的事情,而且容易出错,如果有现成的,

Dapper基础知识三

在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. Dapper,当项目在开发的时候,在没有必要使用依赖注入的时候,如何做到对项目的快速开发这里对Dapper做一个小的进阶. 结合上一篇的博客,就可以使用了. public class Demo { public string name { get; set; } public string DapperTest { get; set; } } public class

Linux基础知识三

1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. 查看系统用户的命令为: (1)getent passwd 查看系统上的所有用户信息 (2)w 查看登录用户正在使用的进程信息,该命令所使用的信息来源于/var/run/utmp文件 w命令输出的信息包括: -用户名称 -用户的机器名称或tty号 -远程主机地址 -用户登录系统的时间 -空闲时间(作用不大) -附加到tty(终端)的进程所用的时间(JCPU时间) -当前进程所用时间(PCPU时间) -用户当

【基础知识三】线性模型

一.基本形式 通过属性的线性组合来进行预测, 许多非线性模型可以在线性模型的基础上,引入层级结构或高维映射而得. 二.线性回归 最小二乘法:求解ω和b: 多元线性回归:样本由多个属性描述,即x为多维向量: 若矩阵不满秩产生多个解,解决方法:引入正则化项: 三.对数/逻辑线性回归 广义线性模型: g(.)条件:连续且充分光滑(单调可微) 为了预测值连续,引入Sigmoid函数 得到, 极大似然估计:求解ω和b 四.线性判别分析LDA 也叫"Fisher判别" 将样例投影到一条直线上,使同

KnockoutJS基础知识(三)

对于knockoutJS来讲,模板绑定和Mapping插件绑定是十分重要的功能,虽然模板绑定在我工作中用的及其少,但模板绑定的重要性不可忽视,在其他前端框架中,如Angular.Vue等等,模板存在的意义十分重要,Mapping插件使得我们能够脱离手工绑定,及其方便我们快速绑定达到预期效果. KnockoutJS模型绑定更多用法:https://knockoutjs.com/documentation/template-binding.html 本文地址:https://www.cnblogs.

3. K线基础知识三

1. 阴线 证券市场上指开盘价高于收盘价的K线,K线图上一般用淡蓝色标注,表示股价下跌,当收盘价低于开盘价,也就是股价走势呈下降趋势时,我们称这种形态的K线为阴线. 中间部分实体为蓝色,此时,上影线的长度表示最高价和开盘价之间的价差.实体的长短代表开盘价比收盘价高出的幅度.下影线的长度则有收盘价和最高价之间的价差大小所决定. 2. 小阴星 小阴星的分时走势图与小阳星相似,只是收盘价格略低于开盘价格.表明行情疲软,发展方向不明. 3. 小阴线 表示空方呈打压态势,但力度不大. 4. 光脚阴线 光脚

cocos2d0基础知识三个音符

1.触摸屏事件: bool HelloWorld::init() { //省略的代码的最后位 this->schedule(schedule_selector(HelloWorld::usecreatesprite),2);//定时器 this->setTouchEnabled(true);/CCLayer是能够对应点击对象的,默认情况是没开启的,我们通过this->setTouchEnabled(true)来设置是否接受触摸事件. return true; } void HelloWo