加密解密工具 之 恩尼格玛密码机密码

article/2025/10/2 10:30:53

工具链接:http://www.atoolbox.net/Tool.php?Id=993

恩尼格码密码机及加密原理

恩尼格码密码机是二战时期的纳粹德国及其盟国,特别是德国军方所使用的一种高级机械加密系统,以转子结构为主体。

密码机一般装在一个盒子里。当要加密一串字符时,操作员要在机器下方的键盘上按出明文,每当按下一个字母,键盘上方背光字母盘上的一个字母就会亮起来,这就是机器所生成的密码。在输入需要加密的信息的同时,我们便可以根据按顺序亮起的字母,记录下一串与明文长度相等的密码。

比如,我们对 “OVERLYATTACHED” 这串字符进行加密。依次输入:O-V-E-R-L-Y-A-T-T-A-C-H-E-D,上方的字母盘上依次亮起:J-F-U-J-O-Z-F-K-Z-N-L-F-W-M,这就是密码机所产生的密码。

 

键盘一共有26个键,键盘排列和广为使用的计算机键盘基本一样,只不过为了使通讯尽量地短和难以破译,空格、数字和标点符号都被取消,而只有字母键。键盘上方就是显示器,这可不是意义上的屏幕显示器,只不过是标示了同样字母的26个小灯泡,当键盘上的某个键被按下时,和这个字母被加密后的密文字母所对应的小灯泡就亮了起来,就是这样一种近乎原始的“显示”。在显示器的上方是三个直径6厘米的转子,它们的主要部分隐藏在面板下,转子才是“恩尼格玛”密码机最核心关键的部分。如果转子的作用仅仅是把一个字母换成另一个字母,那就是密码学中所说的“简单替换密码”,而在公元九世纪,阿拉伯的密码破译专家就已经能够娴熟地运用统计字母出现频率的方法来破译简单替换密码,柯南·道尔在他著名的福尔摩斯探案《跳舞的小人》里就非常详细地叙述了福尔摩斯使用频率统计法破译跳舞人形密码(也就是简单替换密码)的过程。——之所以叫“转子”,因为它会转!这就是关键!当按下键盘上的一个字母键,相应加密后的字母在显示器上通过灯泡闪亮来显示,而转子就自动地转动一个字母的位置。举例来说,当第一次键入A,灯泡B亮,转子转动一格,各字母所对应的密码就改变了。第二次再键入A时,它所对应的字母就可能变成了C;同样地,第三次键入A时,又可能是灯泡D亮了。——这就是“恩尼格玛”难以被破译的关键所在,这不是一种简单替换密码。同一个字母在明文的不同位置时,可以被不同的字母替换,而密文中不同位置的同一个字母,又可以代表明文中的不同字母,字母频率分析法在这里丝毫无用武之地了。这种加密方式在密码学上被称为“复式替换密码”。

 

但是如果连续键入26个字母,转子就会整整转一圈,回到原始的方向上,这时编码就和最初重复了。而在加密过程中,重复的现象就很是最大的破绽,因为这可以使破译密码的人从中发现规律。于是“恩尼格玛”又增加了一个转子,当第一个转子转动整整一圈以后,它上面有一个齿轮拨动第二个转子,使得它的方向转动一个字母的位置。假设第一个转子已经整整转了一圈,按A键时显示器上D灯泡亮;当放开A键时第一个转子上的齿轮也带动第二个转子同时转动一格,于是第二次键入A时,加密的字母可能为E;再次放开键A时,就只有第一个转子转动了,于是第三次键入A时,与之相对应的就是字母就可能是F了。

 

因此只有在26x26=676个字母后才会重复原来的编码。而事实上“恩尼格玛”有三个转子(二战后期德国海军使用的“恩尼格玛”甚至有四个转子!),那么重复的概率就达到26x26x26=17576个字母之后。在此基础上谢尔比乌斯十分巧妙地在三个转子的一端加上了一个反射器,把键盘和显示器中的相同字母用电线连在一起。反射器和转子一样,把某一个字母连在另一个字母上,但是它并不转动。乍一看这么一个固定的反射器好像没什么用处,它并不增加可以使用的编码数目,但是把它和解码联系起来就会看出这种设计的别具匠心了。当一个键被按下时,信号不是直接从键盘传到显示器,而是首先通过三个转子连成的一条线路,然后经过反射器再回到三个转子,通过另一条线路再到达显示器上,比如说上图中A键被按下时,亮的是D灯泡。如果这时按的不是A键而是D键,那么信号恰好按照上面A键被按下时的相反方向通行,最后到达A灯泡。换句话说,在这种设计下,反射器虽然没有像转子那样增加不重复的方向,但是它可以使解码过程完全重现编码过程。

 

使用“恩尼格玛”通讯时,发信人首先要调节三个转子的方向(而这个转子的初始方向就是密匙,是收发双方必须预先约定好的),然后依次键入明文,并把显示器上灯泡闪亮的字母依次记下来,最后把记录下的闪亮字母按照顺序用正常的电报方式发送出去。收信方收到电文后,只要也使用一台“恩尼格玛”,按照原来的约定,把转子的方向调整到和发信方相同的初始方向上,然后依次键入收到的密文,显示器上自动闪亮的字母就是明文了。加密和解密的过程完全一样,这就是反射器的作用,同时反射器的一个副作用就是一个字母永远也不会被加密成它自己,因为反射器中一个字母总是被连接到另一个不同的字母。

 

“恩尼格玛”加密的关键就在于转子的初始方向。当然如果敌人收到了完整的密文,还是可以通过不断试验转动转子方向来找到这个密匙,特别是如果破译者同时使用许多台机器同时进行这项工作,那么所需要的时间就会大大缩短。对付这样“暴力破译法”(即一个一个尝试所有可能性的方法),可以通过增加转子的数量来对付,因为只要每增加一个转子,就能使试验的数量乘上26倍!不过由于增加转子就会增加机器的体积和成本,而密码机又是需要能够便于携带的,而不是一个带有几十个甚至上百个转子的庞然大物。那么方法也很简单,“恩尼格玛”密码机的三个转子是可以拆卸下来并互相交换位置,这样一来初始方向的可能性一下就增加了六倍。假设三个转子的编号为1、2、3,那么它们可以被放成123-132-213-231-312-321这六种不同位置,当然收发密文的双方除了要约定转子自身的初始方向,还要约好这六种排列中的一种。

 

而除了转子方向和排列位置,“恩尼格玛”还有一道保障安全的关卡,在键盘和第一个转子之间有块连接板。通过这块连接板可以用一根连线把某个字母和另一个字母连接起来,这样这个字母的信号在进入转子之前就会转变为另一个字母的信号。这种连线最多可以有六根(后期的“恩尼格玛”甚至达到十根连线),这样就可以使6对字母的信号两两互换,其他没有插上连线的字母则保持不变。——当然连接板上的连线状况也是收发双方预先约定好的。

 

就这样转子的初始方向、转子之间的相互位置以及连接板的连线状况就组成了“恩尼格玛”三道牢不可破的保密防线,其中连接板是一个简单替换密码系统,而不停转动的转子,虽然数量不多,但却是点睛之笔,使整个系统变成了复式替换系统。连接板虽然只是简单替换却能使可能性数目大大增加,在转子的复式作用下进一步加强了保密性。让我们来算一算经过这样处理,要想通过“暴力破解法”还原明文,需要试验多少种可能性:

三个转子不同的方向组成了26x26x26=17576种可能性;

三个转子间不同的相对位置为6种可能性;

连接板上两两交换6对字母的可能性则是异常庞大,有100,391,791,500种;

于是一共有17576x6x100,391,791,500,其结果大约为10,000,000,000,000,000!即一亿亿种可能性!这样庞大的可能性,换言之,即便能动员大量的人力物力,要想靠“暴力破解法”来逐一试验可能性,那几乎是不可能的。而收发双方,则只要按照约定的转子方向、位置和连接板连线状况,就可以非常轻松简单地进行通讯了。这就是“恩尼格玛”密码机的保密原理。


http://chatgpt.dhexx.cn/article/sFHlvW1y.shtml

相关文章

恩尼格玛密码机原理解析(Enigma principle )

恩尼格玛机也结合了机械系统与电子系统。机械系统包括了一个包含了字母与数字的键盘,相邻地排列在一个轴上的一系列名为“转子” 的旋转圆盘,还有一个在每次按键后就使一个或几个转子旋转的装置。各种恩尼格玛机上的机械系统都各为不同,但是&…

使用HttpClient模拟POST请求

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。当前官网最新版介绍页是:http://hc.apache.org/httpcomponents-client-4…

fastmock模拟post、get请求

参考资料: fastmock 帮助文档 初学者可以根据这个文档了解如何创建项目 【前端必备基本技能】-fastMock平台使用_哔哩哔哩_bilibili 如果觉得文档不好理解的小伙伴可以看这个视频,本人觉得讲的很仔细。 Mock.js 实例练习: get请求 …

TCP模拟HTTP请求

HTTP的特性 HTTP是构建于TCP/IP协议之上,是应用层协议,默认端口号80 HTTP协议是无连接无状态的 HTTP报文 请求报文 HTTP协议是以ASCⅡ码传输,建立在TCP/IP协议之上的应用层规范。 HTTP请求报文由请求行(request line)、…

使用postman模拟post、get请求

postman通常作为一种接口测试工具,如:采用post、get等方式,模拟对接口进行访问,用于查看接口功能是否正常。 模拟POST请求 选择请求方式为POST 设置请求url地址 http://localhost:8081/webside/subSystemLogin.html 选择Header…

如何简单的模拟发送http post请求

有天在做项目演示的时候要用到post请求的模拟发送,为此总不至于写一个html页面,当时只记得百度了一下模拟发送http post请求,方法大概都是说用fiddler工具或者使用cmd内置telnet客户端模拟http请求。 这里抄送附上fiddler工具和telnet模拟po…

接口测试中模拟post四种请求数据

转自 作者:隋胖胖LoveFat 链接:https://www.jianshu.com/p/3b6d7aa2043a 来源:简书 一、背景介绍 在日常的接口测试工作中,模拟接口请求通常有两种方法,fiddler模拟和HttpClient模拟。 Fiddler是一个简单的http协议调…

谷歌学术访问

https://via.hypothes.is/ 不需要镜像,不需要任何操作,只需打开这个网站,输入你要访问的学术网站,秒开 第一步: 第二步:

谷歌学术(google scholar)个人主页的论文信息不准确怎么办?

题目:谷歌学术(google scholar)个人主页的论文信息不准确怎么办? 谷歌学术主页是很多人展示自己学术成果的一种方式,但很多时候,谷歌自动给你聚集到主页的论文信息是有误的,这时候怎么去编辑呢? 论文信息…

谷歌学术介绍

转载自:http://blog.renren.com/share/111541487/15517062888 “谷歌学术”是谷歌搜索引擎中的学术检索部分,相对于知网、维普、万方、Pubmed等专业的论文数据库来说功能单薄了些,但具有页面简约、搜索速度快、集国内外文献于一体、某些文章可…

Google 学术搜索(Google Scholar)使用技巧

本文简介Google 学术搜索(Google Scholar)使用技巧, 关于Web Of Science 上搜索文献,查看SCI分区及影响因子情况参见我的另一篇博客(https://xiongyiming.blog.csdn.net/article/details/78474211) Google…

【谷歌学术】使用指南

【谷歌学术】使用指南 谷歌可以清楚看到作者的影响力,尤其是在衡量一个学者有多厉害,论文质量有多高【往往是博士阶层往上】 谷歌学术网站: https://scholar.google.com.hk/?hlzh-CN 查人 查论文都很好用 同时你订阅这个作者 还会收到他…

如何在谷歌学术下载论文

如何在谷歌学术下载论文(在Mac Pro上记录,但是windows应该同样适用) 1 下载谷歌浏览器 下载谷歌浏览器 官网截图如下: 2 下载谷歌浏览器扩展程序 googlehelper下载 在下载的时候,要记住下载的位置,后面…

谷歌学术搜索

Google Scholar (谷歌学术搜索,简称GS)是一个可以免费搜索学术文章的网络搜索引擎索引了出版文章中文字的格式和科目,能够帮助用户查找包括期刊论文、学位论文、书籍、预印本、文摘和技术报告在内的学术文献,内容涵盖自…

谷歌学术Google Scholar超实用干货(拒绝翻墙/插件)

最近看了很多大佬博主发的谷歌学术使用总结,觉得特别有用,小P在这里简单的总结一下,给自己做个使用大纲,也分享给大家啦!(觉得有帮助别忘了点赞、收藏哦) 谷歌学术简单来说就是一个汇集大量外文文献的网站(类似于百度学术)。百度学术的特点是:精简、不全不新,谷歌学…

科研——谷歌学术使用方法

输入需要搜索的文章名 点击“引用”,即可以出此篇文章的引用格式。点击“被引用次数”,即可以看到引用此篇文章的其他文章。 勾选“在引用文章中搜索”,在上方的空白处,搜索这些引用文章中的具体文章。 点击一篇查看是否被真正引用…

谷歌学术——下载论文

一些同学在找论文的时候,在学校数据库找不到,因此可以使用谷歌学术来找。但是国内被墙了,无法访问,所以可以使用镜像服务器。 首先进入谷歌镜像: 镜像网站(https://ac.scmor.com/) 点击进入之后…

国内外常用学术网站(访问不了“谷歌学术”的,试一试有惊喜哦)

搞学术的可能对如何能够快速查找优质免费学术资源感到头大于是笔者寻找了许许多多方法,搜集了很多网站,期望谷歌访问不了是可以找到替代或者与谷歌学术相媲美的网站,现汇总如下分享给大家,希望对搞研究的有所帮助。 一、学术网站…

RPC框架介绍

什么是RPC框架: 远程过程调用RPC,就是客户端基于某种传输协议通过网络向服务提供端请求服务处理,然后获取返回数据(对于ONE WAY模式则不返还响应结果);而这种调用对于客户端而言,和调用本地服务一样方便,开…

跨语言rpc框架Thrift

RPC 全称 Remote Procedure Call——远程过程调用。RPC技术简单说就是为了解决远程调用服务 的一种技术,使得调用者像调用本地服务一样方便透明 Thrift的定义 Thrift是一个轻量级、跨语言的RPC框架,主要用于各个服务之间的RPC通信,最初由Face…