剧情简介
二战期间,盟军苦于德国的密码系统“英格玛”无法破译,政府召集了一批数学家、逻辑学家进行秘密破解工作,艾伦·图灵(本尼迪克特·康伯巴奇饰)就是其中之一。破解计划刚开始,图灵遭到了以休·亚历山大(马修·古迪饰)为首的组员和领导的排斥,幸而军情六局局长斯图尔特·孟席斯(马克·斯特朗饰)帮助他立项研究破译密码的机器,而图灵则变成了负责人,并招收了新的成员琼·克拉克(凯拉·奈特莉饰)开始艰难的工作。琼很快就迷上了图灵,由于她的帮助所有组员空前的团结,并于两年后成功破解了德军密码。图灵一度与琼订婚,但却隐瞒了一个秘密,因为这个秘密他最终遭受到非人的待遇……
直到第一次世界大战结束为止,所有密码都是使用手工来编码的。 // 铅笔加纸
明文(就是没有经过加密的原始文本),必须由加密员人工一个一个字母地转换为密文。
考虑到不能多次重复同一种明文到密文的转换方式
转换通常是采用查表的方法,所查表每日不同。 // 解码速度极慢,接收密码一方又要用同样的方式将密文转为明文。
这就造成了编码效率低下的问题
简单替换密码
凯撒法就是一种简单替换法,通过对单字母的替换位置得到不同的密码表。
比如说 A、B、C、D、E 。每个字母向字母表后移一位。那么就得到了:B、C、D、E、F。
这种单字母替换的方式很容易就被破解了出来了。
由此衍生出了多字母替换表,通过增加一行密码表来对明文进行重复加密。
明文: A、B、C、D、E 、F、G、H、I、J、K
替换表1:B、C、D、E、F、G、H、I、J、K、L
替换表2:C、D、E、F、G、H、I、J、K、L、M
以及后来的矩阵加密表
通过不停增加替换表来对明文进行一次重复加密。
#include <iostream>
using namespace std;
/*单行密码加密实现*/
void replace(char Ex[256],char Cp[256])
{
int i = 0;
while (Ex[i] != '\0') {
if (Ex[i] < 0 || Ex[i] < 117)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>Cp[i] = Ex[i] + 1;
<span style="white-space:pre"> </span>}<span style="font-family: Arial, Helvetica, sans-serif;">else </span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>Cp[i] = Ex[i] - 1;</span>
i++;
}
Cp[i++] = '\0';
cout << "加密结果:" << endl<< Cp << endl;
}
int main()
{
char Express[256], cipher[256];
do
{
cout << "请输入明文:" << endl;
cin >> Express;
replace(Express, cipher);
} while (Express != '\0');//ASCII码,对是0,对应的字符是(Null)
}