AES加密

由于Git被我玩残(我被Git玩残)了,代码就直接放博客园吧。

加密

# -*- coding: utf-8 -*-
'''
作者:20191113 林紫欣
文件名称:采用AES对称加密算法——加密
时间:2020年5月16日
'''
import os
import psutil
import base64
from Crypto.Cipher import AES
def add_to_16(value):# str不是16的倍数那就补足为16的倍数
    while len(value) % 16 != 0:
        value += '\0'
    return str.encode(value)  # 返回bytes
def encrypt_oracle():#加密方法
    key = input('\n请设置一个秘钥用于加密文件:')
    # time.sleep(1)
    print('\n当被加密文件与本程序不同目录时\n请输入要加密文件完整路径包括文件名以及后缀;')
    # time.sleep(3)
    print('当被加密文件与本程序同一目录时只需输入文件名以及后缀.')
    file_path = input('请输入:')
    filepath,tempfilename = os.path.split(file_path)#filepath源文件所在路径,tempfilename源文件名称包含后缀
    filename,extension = os.path.splitext(tempfilename)#filename源文件名称不包含后缀,extension源文件后缀
    savefile = filename+' encrypted.txt'+extension#加密后文件名称
    try:
        try:
            virtualmem = psutil.virtual_memory()#获取本机内存信息
            availablemem = round(virtualmem.available / 3)
            filesize = os.path.getsize(file_path)
            if filesize > availablemem:
                print("\n加密文件大于系统可用内存可能影响加密效率或出现内存崩溃\n\n\n")
                print('是否继续运行 继续操作请按"y"返回请按"n"\n\n\n')
                temp = input('请按键选择')
                if temp == "n" or temp == "N" :
                    encrypt_oracle()
        except:
            print('\n输入有误,请重新输入')
            encrypt_oracle()
        text = open(file_path, 'rb').read()# 待加密文本
        open(file_path, 'rb').close()
    except:
        print('\n输入有误,请重新输入')
        encrypt_oracle()
    text = str(text)
    aes = AES.new(add_to_16(key), AES.MODE_ECB)# 初始化加密器
    encrypt_aes = aes.encrypt(add_to_16(text))#先进行aes加密
    encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='cp936') #用base64转成字符串形式 # 执行加密并转码返回bytes
    if filepath == "":
        logbat = open(savefile, 'w')
        logbat.write(encrypted_text)
        logbat.close()
        print('\n文件加密成功 文件以保存为 ',savefile)
    else:
        logbat = open(filepath+'\\'+savefile, 'w')
        logbat.write(encrypted_text)
        logbat.close()
        print('\n文件加密成功 文件保存在 ',filepath,'中 \n\n文件名为 ',savefile)

encrypt_oracle()

解密

# -*- coding: utf-8 -*-
'''
作者:20191113 林紫欣
文件名称:采用AES对称加密算法——解密
时间:2020年5月16日
'''
import os
import base64
from Crypto.Cipher import AES
def add_to_16(value):# str不是16的倍数那就补足为16的倍数
    while len(value) % 16 != 0:
        value += '\0'
    return str.encode(value)  # 返回bytes
def decrypt_oralce():#解密方法
    key = input('\n请输入用于解密文件的秘钥:')
    # time.sleep(1)
    print('\n当被解密文件与本程序不同目录时\n请输入要解密文件完整路径包括文件名以及后缀;')
    # time.sleep(3)
    print('当被解密文件与本程序同一目录时只需输入文件名以及后缀.')
    file_path = input('请输入:')
    filepath, tempfilename = os.path.split(file_path)
    filename, extension = os.path.splitext(tempfilename)
    try:
        text = open(file_path, 'rb').read()# 待加密文本
        open(file_path, 'rb').close()
    except:
        print('\n输入有误,请重新输入')
        decrypt_oralce()
    savefile = input('\n请输入解密后文件的名字包括后缀 请不要使用特殊符号:')
    text = str(open(file_path, 'r').read())# 密文文件
    open(file_path, 'r').close()
    aes = AES.new(add_to_16(key), AES.MODE_ECB)# 初始化加密器
    base64_decrypted = base64.decodebytes(text.encode(encoding='cp936'))#优先逆向解密base64成bytes
    decrypted_text = str(aes.decrypt(base64_decrypted),encoding='utf-8').replace('\0','')#执行解密
    decrypted_text2 = eval(decrypted_text)
    decrypted_text3 = decrypted_text2.decode('utf-8')
    if filepath == "":
        logbat = open(savefile, 'w+')
        logbat.write(decrypted_text3)
        logbat.close()
        print('\n文件解密成功 文件以保存为 ',savefile)
    else:
        logbat = open(filepath+'\\'+savefile, 'w+')
        logbat.write(decrypted_text3)
        logbat.close()
        print('\n文件解密成功 文件保存在 ',filepath,'中 \n\n文件名为 ',savefile)

decrypt_oralce()
 posted on 2020-05-17 11:15  20191113林紫欣  阅读(189)  评论(0编辑  收藏  举报