前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网盘分享内容总被无端和谐?来试试这个!

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

作者头像
你好戴先生
发布2022-12-06 16:51:45
1.2K0
发布2022-12-06 16:51:45
举报
文章被收录于专栏:戴言泛滥戴言泛滥

## 背景

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

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

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

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

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

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

## 需求

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日

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 你好戴先生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档