欢迎光临散文网 会员登陆 & 注册

【计算机博物志】战争密码(上集)如何复刻一台恩格玛机

2021-10-31 19:39 作者:1048576_  | 我要投稿


02:13


这里就是密文的对称性(谁这么闲,发HelloWorld)


并不是字母replace



02:41


字母替换太土了,2000年前就有了,“现在”流行恩格玛!

n , s = int(input()) , input()
for i in range(26) :
    print(i,end = " ")
    for j in s:
        print(end = chr((ord(j) - ord("A") + i)%26 + ord("A")))
    print()


凯撒密码的暴力破解器(Py)

#include <bits/stdc++.h>
using namespace std;
#define ri register int
int main(){
	int n;
	string s;
	cin>>n>>s;
	for(ri i=0;i<26;i++){
		cout<<i<<' ';
		for(ri j=0;j<n;j++)cout<<char((s[j]-65+i)%26+65);
		cout<<endl;
	}
	return 0;
}


还有C++版本


移位替换


用随机产生403291461126605635584000000种替换表



04:30


统计法破解任意字母替换,字母中“E”“T”最高,“X”“Q”“Z”“J”最低



05:58


这里用多表替换

int table[N][26]


第i个字符s[i]加密成table[i%N][s[i]-'A']

然后发现统计学没用了

但是会MLE(OI用语,内存过高)(其实不太高,但是对于人脑太高了)







替换其实用的是转子(核心组件)

5个轮子:

电流 <- 反射轮 转轮I 转轮II 转轮III 输入轮 <- 电流


如此将电流转化为机械




随机打乱了对应的关系(随机table

继续随机接线

I转轮就更坑了,这就很难破解勒


11:06






11:38




这样反射会产生两次加密

自反:f(f(x)) = x

排己:f(x) ≠ x


13:00



转轮,转轮,可以转动。所以如此加密表一直在变化。


14:25



初始位置(这就是秘钥)



x转轮 -> 26^x个组合

期待下集(明年见(实际上心中:冥间见))

【计算机博物志】战争密码(上集)如何复刻一台恩格玛机的评论 (共 条)

分享到微博请遵守国家法律