from pathlib import Path
from typing import Union, Tuple
from numpy import uint8, frombuffer as npbuff, tile as npfill
def Decrypt(fp: Path, klen: int = 32):
with open(fp, 'rb') as f:
if f.read(4).startswith((b'\xFF\xD8\xFF', b'\x89PNG')): return
f.seek(0)
darr = npbuff(f.read(), dtype=uint8)
dlen = len(darr)
basekey = f'{dlen}2fjaykPFd6bAJn59beX5TWDQzsEW'.encode('utf-8')
keylen = len(basekey)
key = bytearray(klen)
o, t = 0, 0
for i in range(klen):
o = key[i] = basekey[t] ^ o
t = (t + 1) % keylen
karr = npbuff(key, dtype=uint8)
data = (darr ^ npfill(karr, (dlen // klen) + 1)[:dlen]).tobytes()
if not data[:4].startswith((b'\xFF\xD8\xFF', b'\x89PNG')):
print(f'解密错误 --- {fp.as_posix()}')
return
with open(fp, 'wb') as f:
f.write(data)
def batch(img_path: str = '', ext: Union[str, Tuple[str, ...]] = ('.png', '.jpg'), subfolder: bool = False):
path = Path(img_path) if img_path else Path.cwd()
need = [i for i in (path.rglob('*') if subfolder else path.glob('*')) if i.suffix.endswith(ext)]
for i in need:
Decrypt(i)
if __name__ == '__main__':
path = r'D:\测试' # 指定图片所在文件夹
ext = ('.png', '.jpg') # 指定要解密的文件类型后缀
subfolder = True # 是否查找子文件夹内的文件
batch(path, ext, subfolder)
1 个赞