【計算機博物志】戰(zhàn)爭密碼(上集)如何復刻一臺恩格瑪機

?02:13?
這里就是密文的對稱性(誰這么閑,發(fā)HelloWorld)

并不是字母replace
?02:41?
字母替換太土了,2000年前就有了,“現(xiàn)在”流行恩格瑪!
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++版本

移位替換

用隨機產(chǎn)生403291461126605635584000000種替換表

?
04:30
?統(tǒng)計法破解任意字母替換,字母中“E”“T”最高,“X”“Q”“Z”“J”最低

?
05:58
?這里用多表替換
int table[N][26]
第i個字符s[i]加密成table[i%N][s[i]-'A']
然后發(fā)現(xiàn)統(tǒng)計學沒用了
但是會MLE(OI用語,內(nèi)存過高)(其實不太高,但是對于人腦太高了)


替換其實用的是轉子(核心組件)
5個輪子:
電流 <- 反射輪 轉輪I 轉輪II 轉輪III 輸入輪 <- 電流


如此將電流轉化為機械


隨機打亂了對應的關系(隨機table

)

繼續(xù)隨機接線
I轉輪就更坑了,這就很難破解勒
?
11:06
?
?
11:38
?
這樣反射會產(chǎn)生兩次加密
自反:f(f(x)) = x
排己:f(x) ≠ x
?
13:00
?
轉輪,轉輪,可以轉動。所以如此加密表一直在變化。
?
14:25
?
初始位置(這就是秘鑰)


x轉輪 -> 26^x個組合
期待下集(明年見(實際上心中:冥間見))
標簽: