网盘分享内容总被无端和谐?来试试这个!

2022-12-06 16:51:45 浏览数 (3)

## 背景

平时我会通过百度网盘分享一些好看的电影和电视剧等视频,但是奈何度娘比较生猛,秉着宁可错杀一千、绝不放过一个的原则,分享的视频链接经常会被和谐,让人很是苦恼

之前考虑通过更改文件名和格式来避开百度网盘的和谐

但是时间长了还是会被和谐

盲猜百度可能是在字节级别对文件进行检查了

所以就想到了通过打乱文件存储内容的的方式

是不是就可以解决这个问题了呢?

## 需求

1、最终需要一个加(解)密的可执行文件

2、通过双击加(解)密文件,将当前目录下的所有文件加(解)密

## 程序设计

首先想到的肯定是对称加密算法:AES加密解密

只要网盘不知道密钥是什么

破解几乎是不可能的

其次语言就选用python,比较简单灵活

最后是代码思路

拿到当前目录下所有的文件列表

递归遍历每一个文件并做加(解)密处理

## 代码实现

### 加密程序

代码语言:javascript复制
import os
import msvcrt
from Crypto.Cipher import AES

key = 'dfdkdfdijidfdjiddssdfdsdfythgdjs'


def encryption_files(path):
    file_list = os.listdir(path)
    for file in file_list:
        absolute_file = path   "/"   file
        if os.path.isfile(absolute_file):
            if file.endswith(".py") or file.endswith(".exe") or file.endswith(".txt"):
                continue

            # 进行加密算法,模式ECB模式,把叠加完的秘钥传进来
            aes = AES.new(pad_key(key.encode()), AES.MODE_ECB)
            # 加密内容,此处需要将字符串转为字节
            data = bytearray(os.path.getsize(absolute_file))
            with open(absolute_file, 'rb') as f:
                f.readinto(data)
                f.close()

            # 将数据传入加密类中,结果为字节类型
            encrypted_data = aes.encrypt(pad(data))

            with open(absolute_file   "_encryption", 'ba') as f:
                f.write(encrypted_data)
            f.close()

            print("加密成功,请查看文件夹下"   absolute_file   "_encryption")

        else:
            # 递归文件夹修改文件名
            encryption_files(absolute_file)


# 加密内容需要可以被16整除,所以进行空格拼接
def pad(text):
    while len(text) % 16 != 0:
        text  = b' '
    return text


# 加密秘钥需要可以被16整除,所以进行空格拼接
def pad_key(key):
    while len(key) % 16 != 0:
        key  = b' '
    return key


if __name__ == '__main__':
    # 获取当前程序所在的文件路径
    path = os.getcwd()
    print("当前文件夹路径:"   path)
    # 加密数据
    encryption_files(path)

    print("欢迎关注微信公众号”你好戴先生“~~~~~")
    print("请按任意键退出~")
    ord(msvcrt.getch())

### 解密程序

代码语言:javascript复制
import os
import msvcrt
from Crypto.Cipher import AES

key = 'dfdkdfdijidfdjiddssdfdsdfythgdjs'


def decryption_files(path):
    file_list = os.listdir(path)
    for file in file_list:
        absolute_file = path   "/"   file
        if os.path.isfile(absolute_file):
            if not file.endswith("_encryption"):
                continue

            # 进行加密算法,模式ECB模式,把叠加完的秘钥传进来
            aes = AES.new(pad_key(key.encode()), AES.MODE_ECB)
            # 加密内容,此处需要将字符串转为字节

            data = bytearray(os.path.getsize(absolute_file))
            with open(absolute_file, 'rb') as f:
                f.readinto(data)
                f.close()

            # 将数据传入加密类中,结果为字节类型
            decrypted_data = aes.decrypt(pad(data))
            absolute_file_after = absolute_file.replace("_encryption", "")
            with open(absolute_file_after, 'ba') as f:
                f.write(decrypted_data)
            f.close()

            print("解密成功,请查看文件夹下"   absolute_file_after)

        else:
            # 递归文件夹修改文件名
            decryption_files(absolute_file)


# 加密内容需要可以被16整除,所以进行空格拼接
def pad(text):
    while len(text) % 16 != 0:
        text  = b' '
    return text


# 加密秘钥需要可以被16整除,所以进行空格拼接
def pad_key(key):
    while len(key) % 16 != 0:
        key  = b' '
    return key


if __name__ == '__main__':

    # 获取当前程序所在的文件路径
    path = os.getcwd()
    print("当前文件夹路径:"   path)
    # 解密数据
    decryption_files(path)

    print("欢迎关注微信公众号”你好戴先生“~~~~~")
    print("请按任意键退出~")
    ord(msvcrt.getch())

### 生成可执行文件

Terminal执行以下命令安装pyinstaller依赖并生成可执行文件

代码语言:javascript复制
# 安装pyinstaller
pip install pyinstaller

# rename_file.py是python程序的相对路径
# 执行以下命令将在当前路径下生成dist/rename_file.exe可执行文件(Windows环境下)
# mac环境下将生成mac系统的可执行文件
pyinstaller -F rename_file.py

文/戴先生@2022年7月31日

0 人点赞