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

网盘内的隐私照片

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

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

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

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

压缩加密

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

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

PYTHON加密

加密单一文件

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

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

import osfrom 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 hashesclass FileEncryptor:def __init__(self, password):self.password = passwordself.salt = os.urandom(16)self.key_length = 32self.hash_algorithm = hashes.SHA256()self.iterations = 100000self.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 Pathclass FolderEncryptor:def __init__(self, encryptor):self.encryptor = encryptordef 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_pathencrypted_root.mkdir(parents=True, exist_ok=True)for file in files:input_file = Path(root) / fileoutput_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_pathdecrypted_root.mkdir(parents=True, exist_ok=True)for file in files:if file.endswith('.enc'):input_file = Path(root) / fileoutput_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.rhkb.cn/news/425278.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021高教社杯全国大学生数学建模竞赛C题 Python代码演示

目录 问题一1.1 根据附件 1,对 402 家供应商的供货特征进行量化分析计算供货特征数据标准化对正向指标归一化对负向指标归一化 1.2 建立反映保障企业生产重要性的数学模型熵权法熵权法-TOPSISAHP 1.3 在此基础上确定 50 家最重要的供应商,并在论文中列表…

钢轨缺陷检测-目标检测数据集(包括VOC格式、YOLO格式)

钢轨缺陷检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1h7Dc0MiiRgtd7524cBUOFQ?pwdfr9y 提取码:fr9y 数据集信息介绍: 共有 1493 张图像和一一对应的标注文件 标…

Neo4j入门案例:三星堆

创建一个关于三星堆的知识图谱可以是一个非常有趣的项目,它可以帮助理解如何使用Neo4j来存储和查询复杂的关系数据。三星堆文化以其独特的青铜器、金器和其他文物而闻名,这为我们提供了一个丰富的历史背景来构建知识图谱。 数据模型定义 实体类型&#…

RTMP直播播放器的几种选择

如何选择RTMP播放器? 在选择RTMP播放器时,需要综合考虑多个因素,以确保选择的播放器能够满足实际需求并提供良好的用户体验。以下是一些选择RTMP播放器的建议: 1. 功能需求 低延迟:对于直播场景,低延迟是…

解读 Java 经典巨著《Effective Java》90条编程法则,第5条:优先考虑依赖注入来引用资源

【前言】欢迎订阅【解读《Effective Java》】系列专栏 《Effective Java》是 Java 开发领域的经典著作,作者 Joshua Bloch 以丰富的经验和深入的知识,全面探讨了 Java 编程中的最佳实践。这本书被公认为 Java 开发者的必读经典,对提升编码技…

STM32巡回研讨会总结(2024)

前言 本次ST公司可以说是推出了7大方面,几乎可以说是覆盖到了目前生活中的方方面面,下面总结下我的感受。无线类 支持多种调制模式(LoRa、(G)FSK、(G)MSK 和 BPSK)满足工业和消费物联网 (IoT) 中各种低功耗广域网 (LPWAN) 无线应…

MelosBoom:解锁数据价值的新纪元

在当今的数字时代,数据被誉为“新的石油”,但用户在传统的Web2环境中,往往无法真正享受到自己贡献数据的价值。大型互联网公司通过集中化的系统和算法,垄断了数据的使用权,并从中获取巨大的商业利益,而数据…

计算机三级网络技术总结(一)

RPR环中每一个节点都执行SRP公平算法IEEE 802.11a和g将传输速率提高到54Mbps一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息就要先建立TCP连接在一个区域内的路由器数一般不超过200个进入接口配置模式&#xff1a;Router(config)#interface <接口名> 封装ppp协…

Qt 实现自定义截图工具

目录 Qt 实现自定义截图工具实现效果图PrintScreen 类介绍PrintScreen 类的主要特性 逐步实现第一步&#xff1a;类定义第二步&#xff1a;初始化截图窗口第三步&#xff1a;处理鼠标事件第四步&#xff1a;计算截图区域第五步&#xff1a;捕获和保存图像 完整代码PrintScreen.…

WLAN实验简述

一&#xff1a;配置生产AP1上级接入层交换机LSW3 sys [Huawei]sysname LSW3 [LSW3]undo info-center enable [LSW3]vlan batch 10 100 [LSW3]int g0/0/2 [LSW3-GigabitEthernet0/0/2]port link-type trunk [LSW3-GigabitEthernet0/0/2]port trunk allow-pass vlan 10 100 [LSW…

Java企业面试题3

1. break和continue的作用(智*图) break&#xff1a;用于完全退出一个循环&#xff08;如 for, while&#xff09;或一个 switch 语句。当在循环体内遇到 break 语句时&#xff0c;程序会立即跳出当前循环体&#xff0c;继续执行循环之后的代码。continue&#xff1a;用于跳过…

STM32 的 CAN 通讯全攻略

目录 一、CAN 通讯概述 二、 CAN 通讯原理 1.ISO11898 标准下的物理层特征 2.CAN 协议的帧类型 3. 总线仲裁介绍 4.位时序 5.STM32 CAN 控制器简介 6.标识符筛选器 三、软件设计 1.发送流程 1.1初始化 CAN 控制器 1.2准备发送数据 1.3 将数据填充到发送缓冲区 1.4…

Vue.js入门系列(二十九):深入理解编程式路由导航、路由组件缓存与路由守卫

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

pikachu下

CSRF(跨站请求伪造) CSRF(get) url变成了这样了&#xff0c;我们就可以新开个页面直接拿url去修改密码 http://pikachu-master/vul/csrf/csrfget/csrf_get_login.php?username1&password2&submitLogin CSRF(post&#xff09; 这里只是请求的方式不同&#xff0c;…

简洁明了!中缀表达式转为后缀表达式规则及代码

简单来说&#xff0c;就是弄两个栈&#xff0c;判断执行&#xff1a; 上代码&#xff1a; #include<iostream> #include<stack> #include<cstring> using namespace std; stack<char>s1,s2; char now; int main(){string c;cin>>c;for(int i0;…

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

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

形式向好、成本较低、可拓展性较高的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…

电子连接器温升仿真教程 一

电子连接器温升是指电子连接器的所有端子在施加额定电载荷的情况下,经过一段时间后,达成热平衡,连接器局部温度不再继续升高,此时规定测试点的温度与测试环境温度的差值。连接器的温升规格值因其应用环境不同,而不同。工业应用,且不与人体接触的电子连接器一般允许温升会…

mybatis 查询Not Found TableInfoCache

近期在工程迁移中遇到一个mybatis查询的问题&#xff0c;检查代码没有问题&#xff0c;但是报Not Found TableInfoCache 解决过程 是不是数据库对应表错误或者实体类指定的表名错误 查看配置文件链接的数据源是否正确TableName中指定的表名然后去数据库看一下是否存在 如果…

【C++】模板进阶:深入解析模板特化

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与Queue 本章将…