声明:本代码可能会删除(或改写)某些文件(或文件夹)(或黏贴版),请小心。但删除的文件(或文件夹)一定在存放代码的py文件的同目录下。本代码需要安装python的库。所以,如果报错,可以尝试安装一下python库。需要在同目录创建 联系人+'(加密).txt'文件和需要加密的文件(此文件不会被删或改下)(加密的话)联系人+'(加密).txt'的格式为:
n(对方的n)
e(对方的e)
n(自己的n)
d(自己的d)
如果解密的话创建 联系人+'(解密).txt' 格式为
n(自己的n)
d(自己的d)
n(对方的n)
e(对方的e)
注:4500>n的位数(十进制)(双方的n的最小值)>10000(加密文字)
200>n的位数(十进制)(双方的n最小值)>10000(加密文件)
此说明可能不是很详细,看不懂的话可以自己看代码
编译器使用python3.11.0或以上的都可以,如果python3.11.0以下的话可以以试一试能不能运行。如果sys.set_int_max_str_digits(5000)报错,就把这行删了(程序中出现的都删了)
老版链接(第一版):https://blog.csdn.net/weixin_73092756/article/details/130039225
老版链接(第二版):(45条消息) python 实现aes256 rsa 混合加解密(改进)_陆明295的博客-CSDN博客
加密代码:
import random
import sys
import time
import pyperclip
import struct
import os
import shutil
from Crypto.Cipher import AES
import zipfile
import operator
import base64
def ijij(dd):
zip_file = dd
zip_file_new = zip_file+'.7z'
# 如果文件存在
if not os.path.exists(zip_file):
print('您要压缩的文件不存在!')
else:
# step 2: 实例化zipfile对象
zip = zipfile.ZipFile(zip_file_new, 'w', zipfile.ZIP_DEFLATED)
# step 3: 写压缩文件
zip.write(zip_file)
print('文件压缩成功!')
def xc(rank_dir,op=1,p=1):
#make_zip(rank_dir,rank_dir+'.7z')
cc='\n'.encode()
if(p):
op=rank_dir+'.7z'
f=open(op,'a')
f.write('')
f.close()
f=open(op,'wb')
z=os.walk(rank_dir)
q=0
s=0
for curDir, dirs, files in os.walk(rank_dir):
q+=len(files)
s+=len(dirs)
f.write(str(q).encode())
f.write(cc)
for curDi, dirs, files in os.walk(rank_dir):
aab=('.\\'+curDi).encode()
for i in files:
f.write(aab)
f.write(cc)
f.write((i).encode())
f.write(cc)
f.write(str(os.path.getsize(".\\"+curDi+'\\'+i)).encode())
f.write(cc)
ff=open('.\\'+curDi+'\\'+i,'rb')
f.write(ff.read())
ff.close()
f.write(str(s).encode())
f.write(cc)
for curDir, dirs, files in os.walk(rank_dir):
for i in dirs:
f.write(('.\\'+curDir+'.\\'+i).encode())
f.write(cc)
f.close()
def me(rank_dir):
#make_zip(rank_dir,rank_dir+'.7z')
pq='\n'.encode()
q=0
s=0
z=[]
for curDir, dirs, files in os.walk(rank_dir):
q+=len(files)
s+=len(dirs)
z.append (str(q).encode())
z.append(pq)
for curDi, dirs, files in os.walk(rank_dir):
qp=('.\\'+curDi).encode()
for i in files:
ff=open('.\\'+curDi+'\\'+i,'rb')
z.append (b''.join((qp,pq,(i).encode(),pq,str(os.path.getsize(".\\"+curDi+'\\'+i)).encode(),pq,ff.read())))
ff.close()
z.append (b''.join((str(s).encode(),pq)))
for curDir, dirs, files in os.walk(rank_dir):
for i in dirs:
z.append (b''.join((('.\\'+curDir+'.\\'+i).encode(),pq)))
return b''.join(z)
a=[]
bj=[]
AES_BLOCK_SIZE = AES.block_size # AES 加密数据块大小, 只能是16
AES_KEY_SIZE = 32
key=''
for i in range(32):
v=random.randint(0,255)
bn=v
v=hex(v)
v=v[2:]
if(len(v)==1):
v='0'+v
key=key+v
a.append(bn)
iv=''
for i in range(16):
v=random.randint(0,255)
bn=v
v=hex(v)
v=v[2:]
if(len(v)==1):
v='0'+v
iv=iv+v
bj.append(bn)
#加密内容需要可以被16整除,所以进行空格拼接
def PKCS_zero(text):
newbytes = [0]
if len(text) % 32:
add = 32 - (len(text) % 32)
else:
add = 0
text = text + bytearray(newbytes * add)
return text
# 加密函数
def vio(key,iv,text):
print("AES_CBC_encrypt")
#print(" key :", key, type(key))
#print(" iv :", iv, type(iv))
#print("plain :", text, type(text))
mode = AES.MODE_CBC
text = PKCS_zero(text)
#text = bytes.fromhex(text)
#print("plain :", bytes.hex(text),type(text))
key = bytes.fromhex(key)
iv = bytes.fromhex(iv)
cryptos = AES.new(key, mode, iv)
cipher_text = cryptos.encrypt(text)
# 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
#print("cipher:", cipher_text, type(cipher_text))
print("************************************************")
return cipher_text
def hxxx (p):
global key
global iv
return vio(key,iv,p)
def hx (p):
global key
global iv
f=open(p,'rb')
cpp=f.read()
po=vio(key,iv,cpp)
return po
def oo():
sys.set_int_max_str_digits(10000)
ooo=input('请输入联系人:')
ccc=ooo+"(加密).txt"
ff=open(ccc)
print("请输入要加密的数据:",end='')
o=input('')
df = pyperclip.paste()
while 1:
test = "哦74人工会3非用246骨灰级の|}{54657326482356765432792以698398i天弘基金ijijihi急急急ii几句hi基金i户籍ijiu及hi就ihi ihi就ihiiji及hi九九iji及uu948958959949958怕怕’、!@#%……&……%¥¥¥###¥##看看风景给;提开发开放吗看见没iffjgokigfuhiojsok34596789ij8igidki;f;.,l.;f,gl.l"
pyperclip.copy(test)
io=input('')
if(io=='哦74人工会3非用246骨灰级の|}{54657326482356765432792以698398i天弘基金ijijihi急急急ii几句hi基金i户籍ijiu及hi就ihi ihi就ihiiji及hi九九iji及uu948958959949958怕怕’、!@#%……&……%¥¥¥###¥##看看风景给;提开发开放吗看见没iffjgokigfuhiojsok34596789ij8igidki;f;.,l.;f,gl.l'):
break
o+='''
'''
o+=io
print("输入完成")
pyperclip.copy(df)
mmm=time.time()
n1=ff.readline()
n1=int(n1)
e=ff.readline()
e=int(e)
n2=ff.readline()
n2=int(n2)
d=ff.readline()
d=int(d)
m=20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000