重新编写this.py文件,将文件另存为this_jiami.py文件,对this.py文件生成的明文文本进行加密
TechWhizKid参考GPT回答:
from Crypto.Cipher import AES
import os
def encrypt_file(file_path, key):
chunk_size = 64 * 1024
output_file = file_path.replace(".py", "_jiami.py")
# 生成16字节的密钥
key = key.ljust(16, '\0').encode()
# 创建加密器对象
cipher = AES.new(key, AES.MODE_ECB)
# 打开原始文件和加密后的文件
with open(file_path, 'rb') as file_in, open(output_file, 'wb') as file_out:
while True:
chunk = file_in.read(chunk_size)
if len(chunk) == 0:
break
# 块大小不是16字节的倍数时,填充空字节
chunk = chunk.ljust(chunk_size, b'\0')
# 加密数据块
encrypted_chunk = cipher.encrypt(chunk)
file_out.write(encrypted_chunk)
# 加密文件
file_path = 'this.py'
key = 'ThisIsASecretKey'
encrypt_file(file_path, key)
为此,可以使用Python内置的加密模块 `hashlib` 来进行加密。下面是一个示例代码,可以将 `this.py` 文件中的文本进行SHA256加密,并将加密结果写入到新的 `this_jiami.py` 文件中。
import hashlib
# 读取明文文本
with open("this.py", "r") as file:
plain_text = file.read()
# 对明文文本进行SHA256加密
hash_object = hashlib.sha256(plain_text.encode())
# 将加密结果写入到新文件中
with open("this_jiami.py", "wb") as file:
file.write(hash_object.digest())
执行该代码后, `this_jiami.py` 文件中将包含 `this.py` 文件的SHA256加密结果,而不是明文内容。请注意,这种加密方法是不可逆的,因此无法直接从加密结果还原出原始文本。
如果要对文件进行加密而不是文件中的文本,请使用其他加密算法,例如AES。您可以使用Python中的 `pycryptodome` 库来进行加密,具体代码取决于您选择的加密算法和参数。
于Python安装目录找寻Lib/this.py,代码如下:
s = """Gur Mra bs Clguba, ol Gvz Crgref
Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""
d = {}
for c in (65, 97): #chr A a
for i in range(26):
d[chr(i+c)] = chr((i+13) % 26 + c) #+13前13个 -13后13个
print("".join([d.get(c, c) for c in s])) #字母解密,符号保留
作者非常皮,几行输出,他甚至套了一个密码。
密码的关键是使用d[chr(i+c)] = chr((i+13) % 26 + c) ,0-12前十三个数字对应的序号结果+13,13-25后13个数组序号结果-13。即一个字母表上的镜像交换密码。