网盘隐私照片泄露?教你如何保护自己的隐私照片!

网盘内的隐私照片

好兄弟最近遇到了一个困难:“我之前一直都是把照片存在网盘里面的,但是最近听说了某网盘的照片泄露了,自己的生活照啊,私密照啊都被人看光了,这太可怕了!我现在也很担心自己的网盘上照片泄露,吓得我都不敢用网盘了。能不能帮我想想办法?”

我说,“这很简单啊,那就不要存网盘了嘛,网盘会员一年也有大几百块钱,你去买u盘,自己存储不就好了。“

好兄弟说,”这不行啊,u盘虽然我也有,但是存储容量没有网盘多,用起来也没有网盘方便。比如说,我在任何地方,只需要登陆一下网盘的账户,就可以使用了,不用额外随时携带u盘,又怕丢失,又怕碰坏,所以,我还是需要网盘的。“

好吧,那么本期,我们就帮好兄弟解决一下这个问题。

压缩加密

其实,想要安全的将照片存储到网盘里,只需要额外进行一次文件加密就行了。这样没有密钥的人,就无法使用照片,即使是泄露了,也不能查看和访问。那么,要如何对照片进行加密呢?

最简单的方法,我们只需要将文件压缩,然后在压缩的时候设置密码就可以了。

首先,我们需要前往7zip的官网:https://www.7-zip.org/

选择一个适合我们的软件版本:

在这里插入图片描述

然后找到我们要存储的照片,右键点击,选择压缩

在这里插入图片描述

在创建压缩包的时候输入密码

在这里插入图片描述

最后,当我们访问压缩包中的文件,或者要将压缩包解压缩的时候,就必须先输入密码,才允许使用了

在这里插入图片描述

PYTHON加密

加密单一文件

当然,如果你不愿意使用压缩包,而是更喜欢通过python的方式,来对一个文件进行加密,那么也是可以的

我们可以使用cryptography库:pip install cryptography

import os


from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes


class FileEncryptor:
    def __init__(self, password):
        self.password = password
        self.salt = os.urandom(16)
        self.key_length = 32
        self.hash_algorithm = hashes.SHA256()
        self.iterations = 100000
        self.key = self.generate_key()


    def generate_key(self):
        kdf = PBKDF2HMAC(
            algorithm=self.hash_algorithm,
            length=self.key_length,
            salt=self.salt,
            iterations=self.iterations
        )
        return kdf.derive(self.password)


    def encrypt_file(self, input_file, output_file):
        iv = os.urandom(16)
        cipher = Cipher(algorithms.AES(self.key), modes.CBC(iv))
        encryptor = cipher.encryptor()
        padder = padding.PKCS7(algorithms.AES.block_size).padder()


        with open(input_file, 'rb') as f:
            plaintext = f.read()


        padded_data = padder.update(plaintext) + padder.finalize()
        ciphertext = encryptor.update(padded_data) + encryptor.finalize()


        with open(output_file, 'wb') as f:
            f.write(iv + ciphertext)


    def decrypt_file(self, input_file, output_file):
        with open(input_file, 'rb') as f:
            iv = f.read(16)
            ciphertext = f.read()


        cipher = Cipher(algorithms.AES(self.key), modes.CBC(iv))
        decryptor = cipher.decryptor()


        padded_plaintext = decryptor.update(ciphertext) + decryptor.finalize()
        unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
        plaintext = unpadder.update(padded_plaintext) + unpadder.finalize()


        with open(output_file, 'wb') as f:
            f.write(plaintext)


if __name__ == '__main__':
    password = b'your_secret_password'
    encryptor = FileEncryptor(password)
    
    # 加密文件
    encryptor.encrypt_file('1.png', '1.png.bin')
    
    # 解密文件
    encryptor.decrypt_file('1.png.bin', '1-decrypt.png')


此时,如果使用encrypt_file,加密文件,加密文件是无法直接看懂的,只有使用decrypt_file解密以后,才能正常访问

遍历加密整个文件目录

刚刚的程序,只能加密单一的文件,如果我有一整个文件夹的文件都需要加密,一个个加密真是太麻烦了,所以,我们还需要提供对整个文件夹进行加密的支持。

import os
from pathlib import Path


class FolderEncryptor:
    def __init__(self, encryptor):
        self.encryptor = encryptor


    def encrypt_folder(self, input_folder, output_folder):
        input_folder = Path(input_folder)
        output_folder = Path(output_folder)
        for root, dirs, files in os.walk(input_folder):
            rel_path = Path(root).relative_to(input_folder)
            encrypted_root = output_folder / rel_path
            encrypted_root.mkdir(parents=True, exist_ok=True)
            for file in files:
                input_file = Path(root) / file
                output_file = encrypted_root / f"{file}.enc"
                self.encryptor.encrypt_file(input_file, output_file)


    def decrypt_folder(self, input_folder, output_folder):
        input_folder = Path(input_folder)
        output_folder = Path(output_folder)
        for root, dirs, files in os.walk(input_folder):
            rel_path = Path(root).relative_to(input_folder)
            decrypted_root = output_folder / rel_path
            decrypted_root.mkdir(parents=True, exist_ok=True)
            for file in files:
                if file.endswith('.enc'):
                    input_file = Path(root) / file
                    output_file = decrypted_root / file[:-4]
                    self.encryptor.decrypt_file(input_file, output_file)


if __name__ == '__main__':
    password = b'your_secret_password'
    encryptor = FileEncryptor(password)
    folder_encryptor = FolderEncryptor(encryptor)
    
    # 加密文件夹
    folder_encryptor.encrypt_folder('要加密的文件目录', '加密以后的文件目录')
    
    # 解密文件夹
    folder_encryptor.decrypt_folder('要解密的文件目录', '解密以后的文件目录')

现在,我们就可以轻松的加密文件了,之后再把加密过后的文件放入网盘,就不怕泄露了。

结果

好兄弟看完了加密方法以后,非常的开心,他表示,“太好了,有了这个,我就可以放心大胆的在我的网盘里面,存放我的二次元老婆了!”

什么?这小子费尽心思去加密,居然是怕别人看自己的纸片人老婆?这也太没分享精神了吧!我要求他交出一些,但是,他宁死不屈。最后,我求(囚)了他很久,他终于,发了一张据说是他最喜欢的图片。

我满怀欣喜的打开看,结果就看到了这个:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瞎老弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值