若以今日之智慧,破解昨日之密码,我辈也当为图灵。
这是一个用 Go 语言实现的恩尼格玛密码机,拥有三个转子和十组飞线。
恩尼格玛(Enigma)是二战期间德国军方使用的加密设备。这台机器的密码系统最终被以艾伦·图灵为首的英国布莱切利园密码破译小组成功破解,成为了密码学历史上的重要里程碑。
想深入了解的可以看看:
- 维基百科:恩尼格玛密码机 📚 - 这里的内容比我说的靠谱
- Enigma的工作原理 ⚙️ - 看不懂英文的请自行脑补
- Enigma的缺陷 🔍 - 哦吼?666
如果你觉得看文档太枯燥,可以去看《模仿游戏》这部电影。 🎬
首先,你得有个 Go 语言环境。
克隆下来,运行:
git clone https://github.com/kaolengmian7/enigma-machine.git
go run main.go
就像德国人给总理发电报一样简单:
curl -X POST http://localhost:8080/api/encrypt \
-H "Content-Type: application/json" \
-d '{
"message": "HELLO WORLD",
"plugboard": ["AB", "CD", "EF", "GH", "IJ"],
"positions": [1, 5, 9]
}'
返回:{"result":"YFNDZ AAEZV"}
跟加密一样,只是接口不同:
curl -X POST http://localhost:8080/api/decrypt \
-H "Content-Type: application/json" \
-d '{
"message": "ZYRXU PZFQI",
"plugboard": ["AB", "CD", "EF", "GH", "IJ"],
"positions": [1, 5, 9]
}'
返回:{"result":"HELLO WORLD"}
plugboard 代表 10 组飞线,上面的例子中只有 5 组,可以自行添加剩下的 5 组。(如果你理解了 enigma 的原理,应该知道字母是不能重复的🐶)
positions 代表三个转子的初始位置,可以自行调整,范围为[0,26)。
如果你觉得这个项目还不错,不妨给个 star。这年头,star 比德军的密码还难得到🐶。
如果有大佬实现了破译代码,欢迎提交 mr 🎉