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

news2024/9/19 7:36:49

网盘内的隐私照片

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

我说,“这很简单啊,那就不要存网盘了嘛,网盘会员一年也有大几百块钱,你去买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('要解密的文件目录', '解密以后的文件目录')

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

结果

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2140733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android MediaPlayer + GLSurfaceView 播放视频

Android使用OpenGL 播放视频 概述TextureView的优缺点OpenGL的优缺点 实现复杂图形效果的场景参考 概述 在Android开发中,使用OpenGL ES来渲染视频是一种常见的需求,尤其是在需要实现自定义的视频播放界面或者视频特效时。结合MediaPlayer,我…

Java后端框架---Spring

目录 一.Spring是什么? 二.Spring Hello World 搭建 三.XML配置bean管理 1.bean标签 2.依赖注入 3.依赖注入的补充 四.注解配置bean管理 1.开启注解扫描 2.使用注解对类进行配置 3.自动注入 五.面向切面编程AOP 1.概述 2.通知 六.spring事务管理 1.数据库…

双三次插值及MATLAB实现

一、双三次插值的概念 双三次插值(Bicubic interpolation),又叫双立方插值。在数值分析这个数学分支中,双三次插值是二维空间中最常用的插值方法。在这种方法中,函数f在点 (x0 ,y0) 的值不仅考虑其直接邻接点对其的影响…

MySQL —— 索引

索引的概念 MySQL的索引是⼀种数据结构,它可以帮助数据库高效地查询、更新数据表中的数据。索引通过 ⼀定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。 MySQL索引类似于书籍的目录,通过指向数据行的位置&…

Flutter Error: Type ‘UnmodifiableUint8ListView‘ not found

问题描述 原本我在Mac开发的项目,现在win10运行时报如下错误: ../../../AppData/Local/Pub/Cache/hosted/pub.dev/win32-3.1.4/lib/src/guid.dart:31:9: Error: Type UnmodifiableUint8ListView not found. final UnmodifiableUint8ListView bytes; ^^…

C# 异步编程场景

前言 异步编程允许程序在等待某些操作(如文件读写、网络请求等)完成时,不必阻塞主线程,从而可以继续执行其他任务。这种非阻塞的特性对于提高应用程序的并发性和响应速度至关重要。C# 通过 async 和 await 关键字,以及…

hh exe所选的程序不能与此文件类型相关联。请选择其他程序。

按照hh exe打开chm文件显示所选的程序不能与此文件类型相关联。请选择其他程序。 以上错误来自于 cmd命令行 cd C:\Windows\hh.exe 要打开的chm文件报错 其实根本原因是在设置中.chm文件默认打开方法被其他软件占用了,解决办法只能删除那个软件,如果是W…

828华为云征文 | 云服务器Flexus X实例:部署 AgentOps,全方位监测智能体

目录 一、什么是 AgentOps ? 二、部署 AgentOps 2.1 安装 AgentOps 2.2 注册账号 2.3 生成 API_KEY 三、AgentOps 实例 3.1 创建实例 3.2 运行实例 四、总结 通过深入体验华为云的 Flexus云服务器X实例,我发现它不仅提供了直接通过公网访问的便利性&#…

【 html+css 绚丽Loading 】 000049 流云穿梭环

前言:哈喽,大家好,今天给大家分享今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f…

回归预测|基于遗传优化卷积神经网络的数据回归预测Matlab程序GA-CNN 多特征输入单输出 附赠基础CNN

回归预测|基于遗传优化卷积神经网络的数据回归预测Matlab程序GA-CNN 多特征输入单输出 附赠基础CNN 文章目录 一、基本原理1. 卷积神经网络(CNN)2. 遗传算法(GA)3. GA-CNN回归预测模型总结 二、实验结果三、核心代码四、代码获取五…

智能BI项目第一期

该项目是全程跟着鱼皮,还未进行功能扩展。为了方便日后复习,打算将一些重要的步骤记录下来。 项目概述 BI:即商业智能:Business Intelligence 过去 需要手动导入数据、选择要分析的字段和图表,并由专业的数据分析师完成分析,最后得出结论。 现在 用户…

docker发布redis容器

1.导入redis镜像 2.写docker-compose文件 并创建容器 redis:container_name: redisimage: redis:latestports:- "6379:6379"restart: always 3.测试一下

“深入解析:MySQL半同步复制的配置指南与实践技巧“

本次配置是在已搭建好主从复制的架构中进行配置 配置环境 操作系统 master节点 slave节点 centos7 8.0.37 8.0.37 配置半同步复制 配置master 安装master半同步复制插件 INSTALL PLUGIN rpl_semi_sync_source SONAME semisync_source.so; 在MySQL的配置文件中添加配置…

论文(六):Fire-Net: A Deep Learning Framework for Active Forest Fire Detection

文章目录 1.Introduction2.Study Area2.1Landsat-8 Dataset2.2Inventory data 3.Methodology3.1Image Pre-processing3.2Proposed Deep Learning Architecture (Fire-Net)3.2.1Convolution Layers3.2.2 Evaluation Indices/methods or accuracy assessment. 4.Results4.1 Austr…

JVM HotSpot 虚拟机: 对象的创建, 内存布局和访问定位

目录 前言 对象的创建 对象的内存布局 对象的访问定位 前言 了解JVM的内存区域划分之后, 也大致了解了java程序的内存分布模型, 也了解它里面的内存区域里面的类型和各个类型的作用, 接下来我们进一步从对象创建到访问的角度, 来看看这些内存区域之间是怎么关联起来的. …

【C++篇】C++类与对象深度解析(二):类的默认成员函数详解

文章目录 【C篇】C类与对象深度解析(二)前言1. 类的默认成员函数2. 构造函数2.1 函数名与类名相同2.2 无返回值2.3 对象实例化时系统会自动调用2.4 构造函数可以重载2.5 默认构造函数的生成规则2.6 无参构造函数与全缺省构造函数的关系2.7 内置类型与自定…

五、(JS)window中的定时器

一、为什么叫做window中的定时器 我们在全局中会用到一些函数,比如说alert函数,prompt函数,setTimeout等等 我们有在这里定义过这些函数吗?很明显没有。可见我们这些函数都是来自于window。 所以还可以写成window.setTimeout。…

Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解

目录 一、Linux软件包管理器 - yum(ubuntu用apt代替yum)1、Linux下安装软件的方式2、认识 yum3、查找软件包4、安装软件5、如何实现本地机器和云服务器之间的文件互传 二、Linux编辑器 - vim1、vim 的基本概念2、vim 下各模式的切换3、vim 命令模式各命令…

【Linux篇】TCP/IP协议(笔记)

目录 一、TCP/IP协议族体系结构 1. 数据链路层 (1)介绍 (2)常用协议 ① ARP协议(Address Resolve Protocol,地址解析协议) ② RARP协议(Reverse Address Resolve Protocol&…