信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】

这篇具有很好参考价值的文章主要介绍了信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】


1. 理论知识

ENIGMA密码机的最基本部分的示意图如下所示,我们可以看见它的三个部分:键盘、转子和显示器。
信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
在上面ENIGMA的照片上,我们可以简单说明ENIGMA密码机的工作原理。通过键盘输入字母,然后通过转子对输入的信息进行加密处理,然后得到密文。为了使消息尽量地短和更难以破译,空格和标点符号都被省略。在示意图中只画了六个键,在实际操作过程中,是有26个字母组成。实物照片中,键盘上方就是显示器,它由标示了同样字母的26个小灯组成,当键盘上的某个键被按下时,和此字母被加密后的密文相对应的小灯就在显示器上亮起来。同样地,在示意图上我们只画了六个小灯。在显示器的上方是三个转子,它们的主要部分隐藏在面板之下,在示意图中我们暂时只画了一个转子。

信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
键盘、转子和显示器由电线相连,转子本身也集成了6条线路(在实物中是26条),把键盘的信号对应到显示器不同的小灯上去。在示意图中我们可以看到,如果按下a键,那么灯B就会亮,这意味着a被加密成了B。同样地我们看到,b被加密成了A,c被加密成了D,d被加密成了F,e被加密成了E,f被加密成了C。于是如果我们在键盘上依次键入cafe(咖啡),显示器上就会依次显示DBCE。

如果转子的作用仅仅是把一个字母换成另一个字母,那么该密码机的破译难度较低,因此为了增强密码的强度,“转子”会转动!这就是ENIGMA的最重要的设计——当键盘上一个键被按下时,相应的密文在显示器上显示,然后转子的方向就自动地转动一个字母的位置(在示意图中就是转动1/6圈,而在实际中转动1/26圈)。下面的示意图表示了连续键入3个b的情况:
信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
当第一次键入b时,信号通过转子中的连线,灯A亮起来,放开键后,转子转动一格,各字母所对应的密码就改变了;第二次键入b时,它所对应的字母就变成了C;同样地,第三次键入b时,灯E闪亮。
信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
照片左方是一个完整的转子,右方是转子的分解,我们可以看到安装在转子中的电线。
这里我们看到了ENIGMA加密的关键:这不是一种简单替换密码。同一个字母b在明文的不同位置时,可以被不同的字母替换,而密文中不同位置的同一个字母,可以代表明文中的不同字母,频率分析法在这里就没有用武之地了。这种加密方式被称为“复式替换密码”。

但是我们看到,如果连续键入6个字母(实物中26个字母),转子就会整整转一圈,回到原始的方向上,这时编码就和最初重复了。而在加密过程中,重复的现象是很危险的,这可以使试图破译密码的人看见规律性的东西。于是我们可以再加一个转子。当第一个转子转动整整一圈以后,它上面有一个齿拨动第二个转子,使得它的方向转动一个字母的位置。看下面的示意图(为了简单起见,现在我们将它表示为平面形式):

信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
这里(a)图中我们假设第一个转子(左边的那个)已经整整转了一圈,按b键时显示器上D灯亮;当放开b键时第一个转子上的齿也带动第二个转子同时转动一格,于是(b)图中第二次键入b时,加密的字母为F;而再次放开键b时,就只有第一个转子转动了,于是©图中第三次键入b 时,与b相对应的就是字母B。

我们看到用这样的方法,要66=36(实物中为2626=676)个字母后才会重复原来的编码。而事实上ENIGMA里有三个转子(二战后期德国海军用ENIGMA甚至有四个转子),不重复的方向个数达到262626 =17576个。

不仅如此在三个转子的一端还十分巧妙地加了一个反射器,而把键盘和显示器中的相同字母用电线连在一起。反射器和转子一样,把某一个字母连在另一个字母上,但是它并不转动。乍一看这么一个固定的反射器似乎没什么用处,它并不增加可以使用的编码数目,但是把它和解码联系起来就会看出这种设计的别具匠心了。见下图:

信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
我们看见这里键盘和显示器中的相同字母由电线连在一起。事实上那是一个很巧妙的开关,不过我们并不需要知道它的具体情况。我们只需要知道,当一个键被按下时,信号不是直接从键盘传到显示器(要是这样就没有加密了),而是首先通过三个转子连成的一条线路,然后经过反射器再回到三个转子,通过另一条线路再到达显示器上,比如说上图中b键被按下时,亮的是D灯。我们看看如果这时按的不是b键而是d键,那么信号恰好按照上面b键被按下时的相反方向通行,最后到达B灯。换句话说,在这种设计下,反射器虽然没有像转子那样增加可能的不重复的方向,但是它可以使译码的过程和编码的过程完全一样。

想象一下要用ENIGMA发送一条消息。发信人首先要调节三个转子的方向,使它们处于17576个方向中的一个(事实上转子的初始方向就是密匙,这是收发双方必须预先约定好的),然后依次键入明文,并把闪亮的字母依次记下来,然后就可以把加密后的消息用比如电报的方式发送出去。当收信方收到电文后,使用一台相同的ENIGMA,按照原来的约定,把转子的方向调整到和发信方相同的初始方向上,然后依次键入收到的密文,并把闪亮的字母依次记下来,就得到了明文。于是加密和解密的过程就是完全一样的——这都是反射器起的作用。稍微考虑一下,我们很容易明白,反射器带来的一个副作用就是一个字母永远也不会被加密成它自己,因为反射器中一个字母总是被连接到另一个不同的字母。

除了可以利用轮子来增加加密的复杂度,还要加上插线板。键盘和第一转子之间设计了一个连接板。这块连接板允许使用者用一根连线把某个字母和另一个字母连接起来,这样这个字母的信号在进入转子之前就会转变为另一个字母的信号。这种连线最多可以有六根(后期的ENIGMA具有更多的连线),这样就可以使6对字母的信号互换,其他没有插上连线的字母保持不变。在上面ENIGMA的实物图里,我们看见这个连接板处于键盘的下方。当然连接板上的连线状况也是收发信息的双方需要预先约定的。
信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
在上面示意图中,当b键被按下时,灯c亮。

于是转子自身的初始方向,转子之间的相互位置,以及连接板连线的状况就组成了所有可能的密匙。三个转子不同的方向组成了262626=17576种不同可能性;三个转子间不同的相对位置为6种可能性;连接板上两两交换6对字母的可能性数目非常巨大,有100391791500种;

于是一共有175766100391791500,大约为10000000000000000,即一亿亿种可能性。

只要约定好上面所说的密匙,收发双方利用ENIGMA就可以十分容易地进行加密和解密。但是如果不知道密匙,在这巨大的可能性面前,一一尝试来试图找出密匙是完全没有可能的。我们看见连接板对可能性的增加贡献最大,那么为什么要那么麻烦地设计转子之类的东西呢?原因在于连接板本身其实就是一个简单替换密码系统,在整个加密过程中,连接是固定的,所以单使用它是十分容易用频率分析法来破译的。转子系统虽然提供的可能性不多,但是在加密过程中它们不停地转动,使整个系统变成了复式替换系统,频率分析法对它再也无能为力,与此同时,连接板却使得可能性数目大大增加,使得暴力破译法(即一个一个尝试所有可能性的方法)望而却步。

二、ENIGMA密码机数字化

第一节的理论知识中,主要是针对现实中如何利用电线等进行传输,再利用计算机仿真实现时,可通过数字化处理来进行说明。
信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
如上左图所示,当输入为A时,所对应的第一个轮子数字为24(位置1),因此对应右侧的数字24(位置25),此时映射到的第二个轮子左侧数字24(位置25),连接到右侧数字24(位置18),映射到第三个轮子左侧数字18(位置18),连接到右侧数字18(位置2)。

然后经过反射器后,再同样的路线返回到第一个轮子,从而得到加密/解密的信息。

当输入第二个字母时,要注意此时的轮子会发生变化,因此要根据变化后的轮子进行调整。比如轮子的排列若是慢速转子、中速转子、快速转子,则每当输入一个字母后,快速转子会转动一下。例如图左所示的轮子,第一个输入为A,则输出到第三个轮子右边为B(此处不考虑反射器的映射输出)。第一个信息进行输出后,快速轮子会转动(假设为向下转动),此时快速轮子中,A所对应的数字为1,若此时输入为B,则第三个轮子后侧输出为Q。在一定规则下,快速轮子转动一定次数,中速轮子转动一次。中速轮子转动一定次数后,慢速轮子进行转动。以此类推。每一次的输入,都在其特定的轮子排列下,得到该条件下的输出。

三、MATLAB仿真

根据实验要求,进行MATLAB仿真。该实验中,轮子的转动规则为:令低速转子转到26状态时前一个高速转子会转动1格,类似于时钟的结构,秒针转到60s时分针转动一格,分针转动到60分时,时针会转动一格。这样只需要判断转子状态即可判断是否进位,而不用count输入字符数。若转动规则为快速轮子转动26次,中速轮子转动一次,则需要记录输入字符数。

主要的思路为模拟,模拟的思路和上述的数字化完全一致,没有任何数学的推导过程。分别用数组zhuanzi1,zhuanzi2,zhuanzi3记录当前时刻下轮子的状态,然后每输入一个字母后,进行轮子的依次连接正向映射。到底第三个轮子后,经过反射器,连接到对应的位置,然后进行反向映射,最终得到显示器输入的结果。注意:此处从左到右轮子的转速依次为:慢速轮子、中速轮子、快速轮子

实验参数要求不展开,可见代码。代码见附录
(由于实验要求,此处慢速轮子、中速轮子、快速轮子的转动关系,如时针分针秒针类似,以26为一周期,快速轮子到26时,会带动中速轮子,中速轮子到26时会带动慢速轮子)

四、ENIGMA密码机软件

通过第三节的ENIGMA密码机的核心程序,可设计APP进行可视化的操作,具体代码源程序如附件所示,此处进行展示。APP设计源码见附件。

ENIGMA程序APP①:
信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
运行说明:
轮子一、轮子二、轮子三、反射器、轮子A、轮子B、轮子C的参数需要手动输入设定。
在输入文本中输入待加密/解密的信息,随后点击下面的按钮,则可在输出文本中得到密文/明文。轮子A、B、C的当前状态会更新在下方。

ENIGMA程序APP②:

该程序为模拟真实密码机按键情况,效果图如下:
信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
运行说明:
首先输入轮子一、轮子二、轮子三、反射器的参数和轮子A、B、C的初始状态,(注意输入文本不需要输入)。然后点击下方按钮,开始运行程序。通过点击下面键盘,单个字母将会输入,并将会记录在右侧的输入文本中。加密/解密得到的密文/明文会在上面的键盘指示灯亮起,并记录在输出文本处。 轮子A、B、C的当前状态会实时更新在右侧。

五、参考资料

Enigma密码机原理介绍http://www.360doc6.net/wxarticlenew/1934756.html
图二来源:http://thefirstnews.com
APP设计参考:信息技术安全课程林助教

六、代码

APP设计在本人GitHub仓库中文章来源地址https://www.toymoban.com/news/detail-442671.html

%% 主程序
%% 初始参数设置
zhuanzi1 = [1:26;20 4 1 14 9 5 26 15 12 6 3 19 23 25 24 17 13 21 2 16 22 11 7 18 8 10]; %轮子1的初始状态参数
zhuanzi2 = [1:26;4 12 6 7 26 2 17 23 5 10 14 13 19 18 20 25 1 24 9 3 21 22 15 16 8 11]; %轮子2的初始状态参数
zhuanzi3 = [1:26;1 14 15 23 6 20 24 18 8 16 4 22 26 2 9 13 5 25 10 7 19 17 11 21 12 3]; %轮子3的初始状态参数
reflect = [1:26;13 4 9 2 26 14 20 23 3 25 16 22 1 6 18 11 19 15 17 7 24 12 8 21 10 5];  %反射器的参数
%str_input = input('需要加密的文字:','s');
str_input = 'JSTEWTLTJICYIJUKZKKCUZBFZCEHUDGICUKWHAJUB';
%str_input = 'HELLO'
%str_input = 'S';
[~,len] = size(str_input);

%% 设置初始轮子状态
s1 = 23;
s2 = 2;
s3 = 3;
zhuanzi1 = initial(zhuanzi1,s1);
zhuanzi2 = initial(zhuanzi2,s2);
zhuanzi3 = initial(zhuanzi3,s3);

%% 加密
k = 0;
for i = 1:len
    s = str_input(i);   %输入的字母(待加密/解密)
    Lposition1 = s - 'A' + 1;   %轮子1左侧对应的绝对位置
    Rposition1 = change1(Lposition1,zhuanzi1);  %轮内映射,轮子1右侧对应的绝对位置
    
    Lposition2 = Rposition1;    %轮间映射,轮子2左侧对应的绝对位置
    Rposition2 = change1(Lposition2,zhuanzi2);  %轮内映射,轮子2右侧对应的绝对位置

    Lposition3 = Rposition2;    %轮间映射,轮子3左侧的绝对位置
    Rposition3 = change1(Lposition3,zhuanzi3);  %轮内映射,轮子3右侧对应的绝对位置

    Rposition_3 = reflect(2,Rposition3);    %经反射器后,轮子3右侧对应的绝对位置
    Lposition_3 = change2(Rposition_3,zhuanzi3);    %反向映射,轮子3左侧对应绝对位置
    
    Rposition_2 = Lposition_3;  %轮间映射,轮子2右侧对应的绝对位置 
    Lposition_2 = change2(Rposition_2,zhuanzi2);    %轮内映射,轮子2左侧对应的绝对位置
    
    Rposition_1 = Lposition_2;  %轮间映射,轮子1右侧对应的绝对位置 
    Lposition_1 = change2(Rposition_1,zhuanzi1);    %轮内映射,轮子1左侧对应的绝对位置
    
    str_out(i) = char('A' + Lposition_1 - 1);   %得到输出
    
    % 轮子进行转动(与时钟的思想类似),以26为周期,当当前低位的数值到了26,则高位进位
    zhuanzi3 = zhuan(zhuanzi3);
    if zhuanzi3(1,1) == 26
        zhuanzi2 = zhuan(zhuanzi2);
        if zhuanzi2(1,1) == 26
            zhuanzi1 = zhuan(zhuanzi1);
        end
    end
end

function nzhuanzi = zhuan(zhuanzi)
    parta = zhuanzi(:,26);
    partb = zhuanzi(:,1:25);
    nzhuanzi = [parta,partb];
end

function nzhuanzi = initial(zhuanzi,t)
    len = 26 - t + 1;
    parta = zhuanzi(:,t:t+len-1);
    partb = zhuanzi(:,1:t-1);
    nzhuanzi=[parta partb];
end

function Lposition = change2(Rposition, zhuanzi)
    rnum = zhuanzi(2,Rposition);
    Lposition = find(zhuanzi(1,:) == rnum);
end

function Rposition = change1(Lposition, zhuanzi)
    lnum = zhuanzi(1,Lposition);
    Rposition = find(zhuanzi(2,:) == lnum);
end

到了这里,关于信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Matlab实现图像去噪技术(附上完整源码+图像+程序运行说明)

    图像去噪是数字图像处理中一个重要的问题,它的目标是恢复由于噪声引起的图像质量下降。噪声可以由各种原因引起,如图像传感器的不完美性能、图像传输过程中的干扰等。在实际应用中,图像去噪技术被广泛应用于医学图像处理、计算机视觉、图像识别等领域。 本文将

    2024年02月14日
    浏览(31)
  • 1024程序员狂欢节有好礼 | 前沿技术、人工智能、集成电路科学与芯片技术、新一代信息与通信技术、网络空间安全技术

    🌹欢迎来到 爱书不爱输的程序猿 的博客, 本博客致力于知识分享,与更多的人进行学习交流 🚩🚩🚩 点击直达福利 一年一度的1024程序员狂欢节又到啦!成为更卓越的自己,坚持阅读和学习,别给自己留遗憾,行动起来吧! 那么,都有哪些好书值得入手呢?小编为大家整理

    2024年02月08日
    浏览(68)
  • 【博弈论笔记】第二章 完全信息静态博弈

    此部分博弈论笔记参考自经济博弈论(第四版)/谢识予和老师的PPT,是在平时学习中以及期末备考中整理的,主要注重对本章节知识点的梳理以及重点知识的理解,细节和逻辑部分还不是很完善,可能不太适合初学者阅读(看书应该会理解的更明白O(∩_∩)O哈哈~)。现更新到

    2024年02月10日
    浏览(37)
  • TSC TTP244Pro 打码机出现的问题及解决方案

    最近在使用TSC的 TTP 244 Pro 打码机的过程中,出现了几个小问题,最后请教了专业的人员才解决了问题,现把需要注意的点记录如下: 先去TSC的** 官网 **上找关于适用于你的打码机和使用环境的驱动,我的是windows 系统,所以选择了驱动下载,然后安装上。 去官网找一个叫

    2024年02月05日
    浏览(54)
  • 快速上手MATLAB:科研、工程、数据分析,MATLAB入门(上)教你基础知识!+分享MATLAB完全学习手册资料(视频+课件+代码

    1、《MATLAB完全学习手册(视频+课件+代码)》 2、《MATLAB入门》 3、《详解MATLAB在科学计算中的应用》 4、《案例二 MATLAB与Excel交互》 5、《MATLAB初学者教程 MATLAB编程-菜鸟入门(清晰版)》 6、《MATLAB常用函数参考 MATLAB函数汇总 精通MATLAB》 7、等等。。。。 编程语言基础:M

    2024年02月06日
    浏览(36)
  • Python开发环境(Visual Studio Code、Anaconda、PyInstaller、Enigma Virtual Box)

    官网下载Anaconda anaconda官网 安装Anaconda 设置系统环境变量 按照实际安装路径新建填写红框环境变量 验证环境是否正常运行 WIN+R输入cmd conda --version python --version pip --version 显示版本信息即为正常 查看版本: conda --version conda -V 检查更新conda: conda update conda 查看已安装的包: con

    2024年02月11日
    浏览(25)
  • C#桌面程序(winform)如何一步步集成内置WebApi(owin技术),解耦IIS,并将Api接收信息推给桌面窗体控件展示

    最近工厂有个需求,服务器上部署了一个服务,此服务要把信息推送给现场多台工控机上的CS上位机程序。由于涉及到多个软件之间的通信,做架构时,首先排除掉中间表形式,从效率和稳定性上也排除掉了Socket,最后采用了WebApi接口形式来做通信。但是有个问题,上位机程

    2023年04月08日
    浏览(29)
  • 信息安全复习四:置换密码&乘积密码&隐写术

    置换密码、Rail Fence密码、行置换密码、乘积密码、转子机、隐写术 重新排列明文字母,达到信息加密的目的。 与替代密码不同的是,原来明文中的字母同样出现在密文中,只是顺序被打断。 古典的置换密码的例子:Rail Fence密码、行置换密码、乘积密码、转子机、隐写术 羊

    2024年02月10日
    浏览(71)
  • Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(中)

    Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart语言吉祥物Dash(中) 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/134098877 【介绍】:本文完全基于Flutter绘图技术绘制一个精美的Dash图标(中

    2024年02月06日
    浏览(80)
  • 提问的艺术 for CHATGPT prompt 技术工程高质量答案完全指南

    关于 prompt 技巧的全面指导 前言 第 1 章:Prompt 工程技术介绍 什么是 Prompt 工程? 第 2 章:指令 Prompt 技术 示例: 第 3 章:角色 Prompt 第 4 章:标准 Prompt 第 5 章:零、一和少量样本 Prompt 第 6 章:“让我们想一想”Prompt 第 7 章:自我一致性 Prompt 第 8 章:种子词 Prompt 第 9 章

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包