编程实现恩格玛加密机(C++)

相信各位看了《模仿游戏》之后,都会对这个二战的加密方法感到很好奇吧,我也不例外,因此编了个程序实现了恩格玛加密机,这机器最大的特点就是有着自反性,只要初始设置一致的时候,那么它就是自反的,比如输入A,加密后B,在一样的设置下,输入B一定会输出A。

详细的介绍可以看这里:

http://www.zhihu.com/question/28397034

下面我实现的是简化版的,没有插线板(如果加上去也是很简单的,只需要替换指定的字母就可以了,这里为了简洁就不添加了)

#include <string>
#include <iostream>
using namespace std;

string Enigma(string input){
    int code;
    int n[6] = {24,2,5,4,10,23};  //定义6个转子
    int nsize=6;
    string output;
    for (int i = 0; i < input.size();i++)
    {
        if(input[i]==‘ ‘){output+=‘ ‘;continue;}
        code = input[i]-‘a‘;
        for (int j = 0; j < nsize;j++)
        {
            code = (code + n[j]) % 26;
        }

        if(code%2==0)   code++;else code--;  //反射器如果偶数+1,奇数-1,反射器只要能实现字母两两配对就可以了。

        for (int j = nsize-1; j >=0;j--)
        {
            code = code - n[j];
            if(code<0)code=26+code;
        }

        n[0]++;
        for (int j = 0; j < nsize-1; j++)
        {
            if (n[j]>=26)
            {
                n[j + 1]++;
                n[j] = 0;
            }
        }
        n[nsize-1] = n[nsize-1] % 26;
        output += code+‘a‘;
    }
    return output;

}

int main()
{
string text="hey hey  helloworld";
string miwen=Enigma(text);
cout <<"密文:"<< miwen<< endl;
cout <<"明文:"<< Enigma(miwen) << endl;
return 0;
}
时间: 2024-10-13 05:28:18

编程实现恩格玛加密机(C++)的相关文章

python编程挑战——使用python实现恩格玛机——chapter 1

想起一个好玩的事情,使用python来实现德军在二战时加密的设备——恩格玛机. 那么什么是恩格玛机,他是怎么工作的?这篇文章提供了很详细的说明: https://www.zhihu.com/question/28397034 请看高票回答. 路一步步走,饭一口口吃,下面,我们也来一步步的实现恩格玛机: chapter 1 用python实现简单的字母替换: 当我输入一串字符串的时候(这串字符串并没有标点符号,只有字母和空格),程序会按照事先设置好的字母替换表,简单的替换掉密码. 如: abcde

Enigma Sim-英格玛密码机模拟器

Enigma Sim是一款Enigma(英格玛)密码机模拟软件,能够对信息进行多表代换加密.该模拟器高度还原了二战时期德国所使用的三种型号Enigma的功能和细节,转子和反射器所对应的字母代换表都参考了历史上真实的Enigma密码机数据.用户通过设定转子型号.转子起始位置.反射器型号以及插线板来设定加密密码,之后可以对输入的明文信息进行加密.解密信息的一方如果知道密码的具体设定便可以将信息还原. App Store Link: comming soon...      软件特色: ·模拟三种En

比特币的算力分析

比特币是近年兴起的一种新的虚拟货币,它的一个突出特征,就是去中心化,即不存在一个或者多个固定核心作为交易枢纽.交易只存在于买卖双方之间. 现以国内比较流行的矿场模式为例,整个比特币的生产流程可以划分为以下几个环节: 1.概念的提出 去中心化和竞争机制,最早存在于中本聪(传说中的比特币创始人和开发者)的大脑里,是其日积月累的思想的产物.在他看来,货币作为一种载体,可以更好的实现去中心化这个思想.而且这其中也牵扯到中本聪对后续具体工作的一些思考和规划. 在这个环节中,没有任何算力参与其中,一切运作都

对于enigma machine的破解

最近看到一篇文章,详细讲解了二战时期德军的enigma machine是怎样被破解的.enigma machine本质上是利用substitution cipher的原理来进行加密的. 1)替换加密的原理及破解方法 在古代,当人们想要对一段文字进行加密时,会把原文(即明文)中的字母按照某种配对关系替换成其他的字母,从而得到一段别人看不懂的密文. 例如我们可以按照以下的配对关系对明文进行加密: 在加密过程中,第一行明码表中的字母分别被替换成位于该字母下方的大写字母.加密结束后,将会得到一段不经解密

(转)3DES、AES、RC6、TEA、RSA、MD5、SHA1、SHA256加密源码大聚齐

原贴地址:http://www.amobbs.com/thread-5466438-1-1.html DES---研究过加密的朋友十分熟悉,老牌的加密方法了.这是一个可逆的对称加密算 法,也是应用最广泛的密钥系统.好像是从1977年美国政府开始采用的.大家都看过U-571吧,DES的思路就是参照二战时期盟军缴获的德军恩格玛加密 机,不过DES比那个要NB的多多了.到现在为止,除了差分分析法和线性分析法外只有暴力穷举法了.前两种方法不是密码学家或数学家都不懂呵,不过穷举 DES,以现有我们大家都可

关于DES加密

数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款机(Automated Teller Machine,ATM)都使用DEA.它出自IBM的研究工作,IBM也曾对它拥有几年的专利权,但是在1983年已到期后,处于公有范围中,允许在特定条件下可以免除专利使用费而使用.1977年被美国政府正式采纳. DES的原始思想可以参照二战德国的恩格玛机,其基本思

关于DES加密内部版讲解

数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款机(Automated Teller Machine,ATM)都使用DEA.它出自IBM的研究工作,IBM也曾对它拥有几年的专利权,但是在1983年已到期后,处于公有范围中,允许在特定条件下可以免除专利使用费而使用.1977年被美国政府正式采纳. DES的原始思想可以参照二战德国的恩格玛机,其基本思

2020-1-1 M 关于数据加密

数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款机(Automated Teller Machine,ATM)都使用DEA.它出自IBM的研究工作,IBM也曾对它拥有几年的专利权,但是在1983年已到期后,处于公有范围中,允许在特定条件下可以免除专利使用费而使用.1977年被美国政府正式采纳. DES的原始思想可以参照二战德国的恩格玛机,其基本思

密码技术小总结

密码技术与编码技术不同,但现在很多人把两者的技术混在一起,但两者某些地方界限确实有些模糊.密码技术与信息隐藏也不同,密码技术是让你看得到但是看不懂,信息隐藏是让你看不到找不到 参考和查看更多内容推荐 本文只是简要总结 http://www.mamicode.com/info-detail-2252602.html https://blog.csdn.net/pdsu161530247/article/details/75667218 <码书 解码与编码的战争> <图解密码技术 第三版&g