黑齿国:一个被历史遗忘的古老国度探秘!

天美租号

今天跟大家聊聊我折腾的“黑齿国”项目,灵感来源于《山海经》,纯粹觉得这名字挺酷,就想看看能不能在代码里搞点啥出来。

我直接在网上搜“黑齿国”,结果出来一堆历史资料,什么“帝俊生黑齿”、“食稻啖蛇”,看得我一头雾水。看来不能直接照搬历史,得自己发挥。

我就寻思,黑齿,那肯定跟“黑”有关。图像处理?不行,太复杂了。数据加密?好像有点意思。于是我决定搞一个简单的文件加密工具,就叫“黑齿”,寓意把文件“染黑”,加密保护起来。

黑齿国:一个被历史遗忘的古老国度探秘!

第一步,先选语言。Go?Java?Python?考虑到以后可能要搞点图形界面,Python上手快,库也多,就它了!

然后,开始搭架子。我新建了一个 `black_*` 文件,先定义几个函数:

`encrypt(filename, key)`:加密文件

`decrypt(filename, key)`:解密文件

加密算法嘛简单点,用异或(XOR)。这玩意儿原理简单,实现起来也快。

我开始写加密函数。读取文件内容,把每个字节跟密钥异或一下,再写回文件。代码大概长这样:

黑齿国:一个被历史遗忘的古老国度探秘!

python

def encrypt(filename, key):

with open(filename, 'rb') as f:

data = *()

encrypted_data = bytearray()

for byte in data:

黑齿国:一个被历史遗忘的古老国度探秘!

encrypted_*(byte ^ key)

with open(filename + '.tooth', 'wb') as f:

*(encrypted_data)

解密函数也差不多,就是再异或一次。

写完核心代码,我做了个简单的命令行界面,用 `argparse` 模块。可以这样用:

黑齿国:一个被历史遗忘的古老国度探秘!

bash

python black_* -e * -k 123 # 加密

python black_* -d * -k 123 # 解密

试了一下,还真能加密解密,挺有成就感的。

但是,问题来了。这个加密太简单了,密钥一泄露,就全完了。而且只能用数字做密钥,太不方便了。

黑齿国:一个被历史遗忘的古老国度探秘!

于是我又改进了一下。

把密钥变成字符串,然后用 `hashlib` 模块生成一个哈希值,再用这个哈希值来加密。这样,密钥就可以是任意字符串了。

我加了一个盐(salt)。在哈希之前,把一个随机字符串加到密钥里,这样即使别人知道你的加密算法,也很难破解。

代码大概改成这样:

python

import hashlib

黑齿国:一个被历史遗忘的古老国度探秘!

import os

def encrypt(filename, key):

salt = *(16)

key = *256(salt + *('utf-8')).digest()

with open(filename, 'rb') as f:

data = *()

黑齿国:一个被历史遗忘的古老国度探秘!

encrypted_data = bytearray()

for i, byte in enumerate(data):

encrypted_*(byte ^ key[i % len(key)])

with open(filename + '.tooth', 'wb') as f:

*(salt)

*(encrypted_data)

黑齿国:一个被历史遗忘的古老国度探秘!

解密的时候,要先读取盐,再用同样的密钥和盐生成哈希值,然后才能解密。

这样改完之后,安全性稍微提高了一点,但是还是不靠谱。毕竟只是简单的异或加密,对于专业人士来说,根本不算什么。

不过我本来就没打算做一个专业的加密工具,只是想玩玩,体验一下。

我把代码上传到了GitHub,算是给这个“黑齿国”项目画上了一个句号。虽然简陋,但至少我动手实践了,也学到了一些东西。

以后有机会,再搞点更复杂的加密算法,说不定真能搞出一个有点用的工具来。

黑齿国:一个被历史遗忘的古老国度探秘!

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,25人围观)

还没有评论,来说两句吧...