模仿游戏-Enigma

剧情简介

二战期间,盟军苦于德国的密码系统“英格玛”无法破译,政府召集了一批数学家、逻辑学家进行秘密破解工作,艾伦·图灵本尼迪克特·康伯巴奇饰)就是其中之一。破解计划刚开始,图灵遭到了以休·亚历山大马修·古迪饰)为首的组员和领导的排斥,幸而军情六局局长斯图尔特·孟席斯马克·斯特朗饰)帮助他立项研究破译密码的机器,而图灵则变成了负责人,并招收了新的成员琼·克拉克凯拉·奈特莉饰)开始艰难的工作。琼很快就迷上了图灵,由于她的帮助所有组员空前的团结,并于两年后成功破解了德军密码。图灵一度与琼订婚,但却隐瞒了一个秘密,因为这个秘密他最终遭受到非人的待遇……


直到第一次世界大战结束为止,所有密码都是使用手工来编码的。 // 铅笔加纸
明文(就是没有经过加密的原始文本),必须由加密员人工一个一个字母地转换为密文。
考虑到不能多次重复同一种明文到密文的转换方式
转换通常是采用查表的方法,所查表每日不同。 // 解码速度极慢,接收密码一方又要用同样的方式将密文转为明文。

这就造成了编码效率低下的问题



简单替换密码

凯撒法就是一种简单替换法,通过对单字母的替换位置得到不同的密码表。
比如说 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)
	
}



//之前写的PPT,晚上重新整理一下

2016年7月31日07:48:34

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值