python 加密解密 文件_python 文件加解密

2023-05-16

#pip install pycryptodome == 3.9.9

from Crypto.PublicKey importRSAfrom Crypto.Random importget_random_bytesfrom Crypto.Cipher importAES, PKCS1_OAEPimportosimportbase64

code= '1ikwcwtfph'

#创建秘钥对

defCreateRSAKeys():

key= RSA.generate(2048)

encrypted_key= key.exportKey(passphrase=code, pkcs=8, protection="scryptAndAES128-CBC")#私钥

with open('my_private_rsa_key.bin', 'wb') as f:

f.write(encrypted_key)#公钥

with open('my_rsa_public.pem', 'wb') as f:

f.write(key.publickey().exportKey())#加密

defEncrypt(filename):

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

data=f.read()

with open(filename,'wb') as out_file:#收件人秘钥 - 公钥

recipient_key = RSA.import_key(open('my_rsa_public.pem').read())

session_key= get_random_bytes(16)#Encrypt the session key with the public RSA key

cipher_rsa =PKCS1_OAEP.new(recipient_key)

out_file.write(cipher_rsa.encrypt(session_key))#Encrypt the data with the AES session key

cipher_aes =AES.new(session_key, AES.MODE_EAX)

ciphertext, tag=cipher_aes.encrypt_and_digest(data)

out_file.write(cipher_aes.nonce)

out_file.write(tag)

out_file.write(ciphertext)#解密

defDescrypt(filename):

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

private_key= RSA.import_key(open('my_private_rsa_key.bin').read(), passphrase=code)

enc_session_key, nonce, tag, ciphertext=[fobj.read(x)for x in(private_key.size_in_bytes(),16, 16, -1)]

cipher_rsa=PKCS1_OAEP.new(private_key)

session_key=cipher_rsa.decrypt(enc_session_key)

cipher_aes=AES.new(session_key, AES.MODE_EAX, nonce)

data=cipher_aes.decrypt_and_verify(ciphertext, tag)

with open(filename,'wb') as wobj:

wobj.write(data)#文件重命名

defRenameFile(dir, filename):

filename_bytes= filename.encode('utf-8')

filename_bytes_base64=base64.encodebytes(filename_bytes)

filename_bytes_base64= filename_bytes_base64[::-1][1:]

new_filename= filename_bytes_base64.decode('utf-8') + '.crypt1'

print(os.path.join(dir, filename))print(os.path.join(dir, new_filename))

os.rename(os.path.join(dir, filename), os.path.join(dir, new_filename))#解密并且恢复名字

defReserveFilename(dir, filename):

f=filename

filename= filename[::-1][7:][::-1]

filename_base64= filename[::-1] + '\n'filename_bytes_base64= filename_base64.encode('utf-8')

ori_filename= base64.decodebytes(filename_bytes_base64).decode('utf-8')print(os.path.join(dir, f))print(os.path.join(dir, ori_filename))

os.rename(os.path.join(dir, f), os.path.join(dir, ori_filename))#文件夹所有文件加密

defencryptFolder(rootDir):

list_dirs=os.walk(rootDir)for root, dirs, files inlist_dirs:for f infiles:

filename=os.path.join(root, f)

Encrypt(filename)

RenameFile(root, f)#文件夹所有文件解密

defdescryptFolder(rootDir):

list_dirs=os.walk(rootDir)for root, dirs, files inlist_dirs:for f infiles:

filename=os.path.join(root, f)

Descrypt(filename)

ReserveFilename(root, f)if __name__ == '__main__':

rootDir= "D://folder"

'''1.第一步执行创建秘钥函数

CreateRSAKeys()

2.第二步加密文件所有文件

encryptFolder(rootDir)

3.解密文件前,先注释第二部代码

#CreateRSAKeys()

#encryptFolder(rootDir)

descryptFolder(rootDir)'''CreateRSAKeys()#encryptFolder(rootDir)

#descryptFolder(rootDir)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 加密解密 文件_python 文件加解密 的相关文章

随机推荐