目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
大家好,这里是海浪学长计算机毕设专题,本次分享的课题是
🎯基于python的文件销毁研究
项目背景
文件销毁是信息安全领域中一项重要的任务。随着数字化时代的到来,大量的敏感信息被存储在各种电子文件中,这些文件可能包含个人身份信息、财务数据、商业机密等敏感内容。当这些文件不再需要时,安全地销毁它们对于保护个人隐私和防止信息泄露至关重要。因此,开展基于Python的文件销毁研究具有重要的背景意义。通过深入研究和开发基于Python的文件销毁技术,可以提供一种高效、可靠且安全的方法来销毁电子文件,帮助组织和个人有效地管理和保护敏感信息,确保其不被恶意获取和滥用。
设计思路
SSD单文件销毁方法是指在固态硬盘(SSD)上彻底删除单个文件的方法,以确保文件内容无法被恢复。这通常涉及使用特定的软件工具或命令来覆盖文件内容,然后安全地删除文件,以防止数据恢复工具能够恢复被删除的文件内容。这个过程确保了文件在SSD上的彻底销毁,符合数据安全和隐私保护的要求。
数据加密销毁方法。该方法包括数据加密写入和解密读取两个核心步骤。在数据加密写入过程中,主机通过接口发送写命令到SSD,SSD接收命令并执行。当接收到主机要写入的明文数据时,SSD的FTL使用AES算法对数据进行加密,生成一个256bit的密钥,并将该密钥存储在指定的密钥存储块上。加密后的密文数据首先被缓存在SSD的RAM中。FTL为每个逻辑数据块分配一个物理地址,逻辑地址与物理地址的映射关系存储在FTL的地址映射表中。当缓存中的密文数据达到一定数量后,FTL会向后端发送写闪存的请求。后端根据写请求,将缓存中的密文数据写入预先分配的闪存空间。这种数据加密销毁方法通过加密过程减少了销毁所需的时间,并降低了对SSD性能的损耗,同时确保了数据在存储和销毁过程中的安全性。

通过使用密码学方法存储SSD中的数据,确保了加密数据在没有相应密钥的情况下无法被解密,从而保护了数据的机密性。当需要销毁数据时,通过销毁加密所使用的密钥,可以确保数据即使在技术上可行的情况下也无法被恢复,因为缺少了解密的关键信息。这种方法将数据的销毁问题转化为密钥的销毁问题,由于密钥的大小通常远小于加密后的密文,因此大大减少了需要销毁的闪存块数量,从而解决了SSD数据销毁过程中可能导致的销毁时间过长和对SSD性能影响的问题。
Scrubbing算法作为一种有效的SSD数据销毁方法,通过多次将数据直接覆写至原数据页上达到销毁目的,特别适用于页级映射的SSD。而基于密码学的文件存储方法,在需要销毁数据时,只需销毁存储密钥的闪存存储块,即可达到数据销毁的目的。这一过程在FTL中实现,通过查找存放密钥的数据存储块并执行数据销毁算法,从而确保密钥对应的密文无法被破译,实现了存储文件的数据销毁。这种策略不仅提高了数据销毁的效率,还降低了对SSD性能的影响,为数据安全提供了更为可靠的保障。

// 假设这个函数被调用时,已经确定了需要销毁的数据页地址
void scrubbing_algorithm(uint32_t data_page_address) {
for (int i = 0; i < SCRUBBING_ITERATIONS; i++) {
// 读取原数据页内容
uint8_t page_data[PAGE_SIZE];
read_from_flash(data_page_address, page_data, PAGE_SIZE);
// 覆写数据页内容,这里使用固定值覆写,也可以是随机值
fill_buffer_with_pattern(page_data, PAGE_SIZE, SCRUBBING_PATTERN);
// 将覆写后的数据写回原数据页
write_to_flash(data_page_address, page_data, PAGE_SIZE);
}
// 确认数据销毁完成
destroy_data_page(data_page_address);
}
// 这个函数负责销毁一个特定的数据存储块
void destroy_data_block(uint32_t block_address) {
// 假设一个数据块包含多个数据页
for (int page = 0; page < PAGES_PER_BLOCK; page++) {
uint32_t data_page_address = block_address * PAGES_PER_BLOCK + page;
scrubbing_algorithm(data_page_address);
}
// 最后,可能需要标记该数据块为已销毁或不可用
mark_block_as_destroyed(block_address);
}
模型实验
为了评估提出的数据销毁算法与已有的ErasuCrypto算法在不同文件大小下的销毁速度,我们采用了Flash-DBSim模拟器进行仿真。在模拟环境中,我们设定了1G的存储空间,页大小为2KB,每个块包含64个页,一个分组则由1024个块组成,总共有两个芯片参与存储。对于待销毁的数据文件,我们选择了2MB和1MB两种大小,同时设定密钥大小为256bit。
在Flash-DBSim模拟器中,我们实现了基于密码学的数据存储方法,并在FTL模块中集成了数据加解密及销毁功能。通过模拟数据写入、读取和销毁过程,我们对基于密码学的方法和ErasuCrypto方法在数据销毁性能上进行了比较。实验结果显示,对于2MB文件,基于密码学的方法仅需约2049ms即可完成密钥数据销毁,而ErasuCrypto方法则需要约3930ms。对于1MB文件,虽然两种方法的销毁时间均较短,但基于密码学的方法仍表现出优势。在数据销毁方面,基于密码学的方法在效率和性能上均优于ErasuCrypto方法。
// 定义密钥数据结构
typedef struct {
uint8_t key[KEY_SIZE]; // 密钥数据
} EncryptionKey;
// 加密函数
void encrypt_data(const uint8_t* plaintext, uint8_t* ciphertext, const EncryptionKey* key) {
// 使用AES-256等加密算法加密数据
}
// 解密函数
void decrypt_data(const uint8_t* ciphertext, uint8_t* plaintext, const EncryptionKey* key) {
// 使用AES-256等解密算法解密数据
}
// 销毁密钥函数
void destroy_key(EncryptionKey* key) {
// 销毁密钥,例如通过覆写密钥数据
memset(key->key, 0, KEY_SIZE);
}
// 销毁数据页函数
void destroy_page(Page* page) {
// 销毁数据页,例如通过覆写页数据
memset(page->data, 0, PAGE_SIZE);
page->is_valid = false;
}
void ftl_encrypted_write(SSD* ssd, uint32_t logical_address, const uint8_t* plaintext) {
EncryptionKey key;
uint8_t ciphertext[PAGE_SIZE];
encrypt_data(plaintext, ciphertext, &key);
// 写入加密数据到SSD
write_page(ssd, chip_index, block_index, page_index, ciphertext);
// destroy_key(&key); // 如果需要立即销毁密钥
}
970

被折叠的 条评论
为什么被折叠?



