深度探索:Secure Hash Algorithm(SHA)全景解析

news2024/11/15 3:43:51

title: 深度探索:Secure Hash Algorithm(SHA)全景解析
date: 2024/4/15 18:33:17
updated: 2024/4/15 18:33:17
tags:

  • SHA安全
  • 抗碰撞性
  • 算法版本
  • 实现细节
  • 性能优化
  • 发展历史
  • 应用案例

在这里插入图片描述

密码学中的哈希函数

一、哈希函数的定义

哈希函数是一种数学函数,它接受任意长度的输入数据(称为“消息”),并生成一个固定长度的输出值(称为“哈希值”或“摘要”)。这个过程称为哈希。

二、哈希函数的作用

  1. 确保数据完整性:通过比较原始数据和新计算出的哈希值,可以验证数据在传输或存储过程中是否被篡改。
  2. 提供唯一标识:哈希值可以作为数据的唯一指纹,用于数据检索和比对。
  3. 构建其他密码学协议:哈希函数是许多密码学协议(如数字签名、密钥生成等)的基础。

三、哈希函数的特性

  1. 单向性:从哈希值推导出原始输入数据在计算上是不可能的。
  2. 抗碰撞性:寻找两个不同的输入数据产生相同哈希值的过程非常困难。
  3. 高灵敏性:原始输入数据的微小变化会导致哈希值产生显著的不同。
  4. 固定长度输出:无论输入数据的大小,哈希函数都会生成一个固定长度的哈希值。

四、哈希函数在密码学中的重要性

  1. 数据完整性验证:保护数据在传输和存储过程中的完整性。
  2. 数字签名:结合公钥加密技术,实现消息的来源验证和不可抵赖性。
  3. 密钥生成:在密钥派生和其他密码学协议中生成安全的密钥。
  4. 安全协议:在SSL/TLS、IPsec等安全协议中,哈希函数用于构建安全握手过程。

SHA算法家族

SHA算法家族是一组广泛使用的密码散列函数,由美国国家安全局(NSA)设计,并由美国国家标准与技术研究院(NIST)发布。这些算法用于将任意长度的数据映射到固定长度的散列值,确保数据的完整性,并在各种安全协议中发挥作用。

SHA-1

设计原理:

SHA-1是基于MD4散列算法设计的,它改进了MD4中的弱点,并增加了安全性。SHA-1接受最大长度为2^64位的消息,并生成一个160位的散列值。

结构:
  • 初始化:使用一个固定的初始值。
  • 分块处理:将消息分割成512位的块。
  • 填充:对最后一个块进行填充,使其长度模512位为448。
  • 压缩函数:对每个块应用一个复杂的压缩函数,该函数包括四个轮次的循环运算,每轮包含20个步骤。
性质:
  • 单向性:从散列值推导出原始消息在计算上是不可能的。
  • 抗碰撞性:寻找两个不同消息产生相同散列值非常困难。
  • 高灵敏性:消息的微小变化会导致散列值显著不同。

SHA-2

SHA-2是一系列散列函数的统称,包括SHA-224、SHA-256、SHA-384和SHA-512等。它们的区别在于生成的散列值的长度和内部结构。

设计原理:

SHA-2系列算法基于SHA-1,但增加了额外的安全性和效率改进。

结构:
  • 初始化:使用不同的初始值。
  • 分块处理:与SHA-1类似,但块大小和循环次数根据散列长度不同而不同。
  • 填充:与SHA-1相同。
  • 压缩函数:每个版本的SHA-2都有独特的压缩函数设计,包括更多的循环和步骤。
性质:
  • 单向性、抗碰撞性和高灵敏性与SHA-1类似。
  • SHA-2的变体提供不同长度的散列值,以满足不同的安全性需求。

SHA-3

SHA-3是NIST在2015年正式发布的散列函数标准,旨在提供与SHA-2不同的设计,以增强安全性。

设计原理:

SHA-3的设计采用了全新的结构,称为Keccak算法,它是一种海绵结构,具有良好的扩散和混淆特性。

结构:
  • 初始化:使用固定的初始状态。
  • 分块处理:将消息分割成任意大小的块。
  • 填充:不需要传统的填充,因为海绵结构可以处理任意长度的消息。
  • 压缩函数:Keccak采用多个轮次的变换,这些变换包括θ、ρ、π、χ和ι步骤。
性质:
  • 单向性、抗碰撞性和高灵敏性。
  • SHA-3提供了不同的输出长度,类似于SHA-2。
  • SHA-3的设计使得它对某些类型的攻击(如长度扩展攻击)更加抵抗。

SHA算法家族的每个版本都在不断的安全评估和改进中,以适应不断变化的安全威胁和技术发展。尽管SHA-1已经不再被认为是安全的,但SHA-256和SHA-3仍然是当前广泛使用的散列函数,用于保护数字安全和数据完整性。

SHA算法的应用

SHA算法在密码学中扮演着至关重要的角色,由于其单向散列特性,它们被广泛应用于确保数据的完整性、验证消息的真实性以及数字签名等多个安全领域。

数字签名

数字签名是SHA算法最直接的应用之一。在数字签名过程中,发送方使用私钥对消息的散列值进行签名。接收方则使用发送方的公钥来验证签名。以下是SHA算法在这一过程中的应用:

  1. 生成散列值:发送方首先使用SHA算法计算消息的散列值。这个散列值是固定长度的,无论原始消息的长度如何。
  2. 签名:发送方使用其私钥对散列值进行加密,生成数字签名。
  3. 验证:接收方收到消息和签名后,使用发送方的公钥解密签名,得到散列值,并独立计算接收到的消息的散列值。
  4. 对比散列值:如果两个散列值匹配,则签名被认为是有效的,消息未被篡改。

消息认证码(MAC)

消息认证码(MAC)是用于验证消息完整性和来源的一种技术。SHA算法可以用来生成MAC:

  1. 共享密钥:通信双方共享一个密钥。
  2. 散列计算:发送方使用SHA算法和共享密钥对消息进行散列计算。
  3. 发送MAC:发送方将消息和MAC一起发送给接收方。
  4. 验证:接收方使用相同的密钥和SHA算法重新计算MAC,并与收到的MAC进行对比。

数据完整性验证

SHA算法在验证数据完整性方面也非常有用:

  1. 散列计算:在数据传输或存储之前,计算数据的SHA散列值。
  2. 存储或传输散列值:将散列值存储在安全的地方或与数据一起传输。
  3. 验证完整性:在数据被访问或接收时,重新计算散列值,并与之前存储或传输的散列值进行对比。
  4. 检测篡改:如果两个散列值不匹配,则表明数据在传输或存储过程中可能被篡改。

具体应用场景

  • 安全通信:在SSL/TLS协议中,SHA算法用于保护数据的完整性,确保在客户端和服务器之间传输的数据未被篡改。
  • 软件分发:软件发布者通常会提供软件包的SHA散列值,以便用户下载后验证软件包的完整性。
  • 版本控制系统:在版本控制系统中,SHA算法用于确保代码库中的文件未被意外或恶意修改。
  • 区块链技术:在区块链中,SHA算法用于确保交易记录的不可篡改性,以及区块之间的链接。
  • 密码管理器:密码管理器使用SHA算法来安全地存储和验证用户的密码。

由于SHA算法的这些应用,它们成为了现代信息安全基础设施的重要组成部分。然而,随着计算能力的提升和密码学研究的深入,旧的算法(如SHA-1)可能会变得不再安全,因此需要定期更新到更安全的算法(如SHA-256或SHA-3)。

SHA算法的安全性

SHA(Secure Hash Algorithm)系列算法包括SHA-1、SHA-256、SHA-384、SHA-512等,它们被广泛应用于密码学领域。在安全性方面,SHA算法的主要考虑因素包括抗碰撞性(Preimage Resistance)、抗第二原像攻击(Second Preimage Resistance)和抗碰撞性(Collision Resistance)。

抗碰撞性(Preimage Resistance)

抗碰撞性指的是给定散列值,很难找到原始消息。对于SHA算法,具有很高的抗碰撞性,即使知道散列值,也难以逆向推导出原始消息。这意味着SHA算法在保护消息的机密性方面是安全的。

抗第二原像攻击(Second Preimage Resistance)

抗第二原像攻击是指对于给定消息,很难找到另一个具有相同散列值的不同消息。SHA算法在这方面也表现良好,即使攻击者知道原始消息,也难以生成一个具有相同散列值的伪造消息。

抗碰撞性(Collision Resistance)

抗碰撞性是指很难找到两个不同的消息,它们的散列值相同。对于SHA算法,尤其是对于较新的版本(如SHA-256、SHA-384、SHA-512),其抗碰撞性非常强大,因此找到碰撞的机会非常小。

攻击案例和应对措施

  1. SHA-1碰撞攻击:在2017年,研究人员成功实施了对SHA-1算法的碰撞攻击,即找到两个不同的消息,它们具有相同的SHA-1散列值。这引发了对SHA-1安全性的担忧,因为碰撞攻击可能导致数字签名和其他安全机制的破坏。针对这种情况,推荐使用更安全的SHA-256或更高版本的算法。
  2. SHA-256及更高版本的安全性:目前,SHA-256以及更高版本的SHA算法仍被认为是安全的,并且没有已知有效的碰撞攻击。因此,对于安全性要求较高的应用,应该选择使用SHA-256或更高版本的算法。
  3. 定期更新算法:由于密码学领域的不断发展和攻击技术的进步,推荐定期评估并更新使用的散列算法,以确保系统的安全性。

总的来说,SHA算法在大多数情况下都提供了良好的安全性保障,但仍需要密切关注密码学领域的发展,及时采取相应的安全措施以保护数据的机密性和完整性。

SHA算法的实现

SHA算法的实现细节因算法版本(如SHA-1, SHA-256, SHA-512等)而异,但它们大多数遵循类似的步骤,包括消息预处理、分块处理和输出散列值。以下是SHA算法实现的一些关键方面:

算法伪代码

以SHA-256为例,其基本步骤可以概括如下:

  1. 初始化变量:选择一系列固定的初始哈希值和常量。

  2. 消息预处理:将消息填充至长度模512位为448位的倍数,通常通过添加一个1位和若干个0位,然后添加一个64位的长度字段来实现。

  3. 分块处理

    • 将消息分割为512位的块。

    • 对每个块,执行以下操作:

      • 将块分割为16个32位的字。
      • 执行80轮的散列计算,每轮使用不同的函数和常量。
  4. 输出散列值:最终的散列值是所有处理过的消息块的累积结果。

实际编程实现

以下是使用Python实现的SHA-256算法的简化版:

from hashlib import sha256

def hash_message(message):
    # 使用内置的hashlib库进行散列计算
    hash_object = sha256(message.encode())
    return hash_object.hexdigest()

在实际编程实现中,以下是一些关键点:

  • 字段操作:通常使用位操作和模运算来实现。
  • 循环和散列计算:需要精确实现算法规定的80轮散列计算。
  • 哈希输出:散列值通常以十六进制字符串的形式表示。

性能优化

性能优化对于散列算法的实现至关重要,尤其是在处理大量数据时:

  1. 并行计算:对于支持并行处理的数据,可以同时处理多个数据块。
  2. 内存使用:优化内存使用可以减少缓存未命中和提高处理速度。
  3. 汇编优化:对于性能要求极高的应用,可以使用特定平台的汇编语言来优化关键操作。
  4. 算法选择:根据实际需求选择合适的SHA版本。例如,SHA-256通常在安全性和性能之间提供了良好的平衡。

其他考虑

  • 安全性:在实现时,确保没有引入安全漏洞,如缓冲区溢出等。
  • 可移植性:在不同平台上测试算法实现,确保其可移植性。
  • 错误处理:实现适当的错误处理机制,确保在输入错误或其他异常情况下程序不会崩溃。

总之,SHA算法的实现需要遵循精确的规范,同时考虑到性能和安全性。在实际应用中,通常使用经过严格审查和优化的库,如OpenSSL或Python的hashlib,以避免潜在的安全问题和性能瓶颈。

SHA算法的发展

SHA(Secure Hash Algorithm)是一系列加密散列函数的统称,由美国国家安全局(NSA)设计并由美国国家标准与技术研究院(NIST)发布。SHA算法的发展经历了多个版本,以适应不断变化的安全需求和计算能力。

早期版本

  1. SHA-0(1993年):最初版本的SHA算法,但由于很快发现了一些小问题,它并没有得到广泛应用。
  2. SHA-1(1995年):SHA-0的修订版,修复了SHA-0中的问题。SHA-1在相当长的一段时间内被广泛使用,但由于其安全性逐渐受到威胁(尤其是随着计算能力的提升),NIST在2010年宣布不再推荐使用SHA-1。

演进过程

  1. SHA-2系列(2001年):为了提高安全性,NIST发布了SHA-2系列算法,包括SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, 和 SHA-512/256。这些算法使用不同的散列长度和构造,提供了更高的安全性。SHA-256和SHA-512是最常用的版本。

    • SHA-256:产生一个256位的散列值,通常用于大多数需要高安全性的应用。
    • SHA-512:产生一个512位的散列值,适用于需要更高安全级别的应用。
  2. SHA-3(2015年):由于对SHA-2的安全性存在一些理论上的担忧(尽管至今未发现实际攻击),NIST举办了一个公开竞赛,最终选择了Keccak算法作为SHA-3。SHA-3提供了与SHA-2不同的设计原理,增加了抵抗未来潜在攻击的能力。

未来可能的发展方向

  1. 安全性增强:随着量子计算的发展,现有的散列算法可能面临安全威胁。因此,研究者和机构正在探索新的散列算法,这些算法能够抵抗量子计算机的攻击。
  2. 效率提升:随着数据量的增加,散列算法的效率变得更加重要。未来的算法可能会在保持高安全性的同时,提供更快的数据处理速度。
  3. 标准化和合规性:随着新的散列算法的发展,NIST和其他标准组织可能会发布新的标准和指南,以适应新的安全威胁和计算环境。
  4. 多用途散列函数:未来的散列算法可能会设计成不仅可以用于生成散列值,还可以用于其他密码学应用,如加密、认证等。
  5. 后量子散列算法:随着后量子密码学的进展,可能会出现新的散列算法,这些算法能够抵御量子计算机的攻击。
  6. 隐私保护散列:为了更好地保护用户隐私,可能会发展出新的散列算法,这些算法能够在不泄露原始数据的情况下提供数据散列。

SHA算法的发展是一个持续的过程,随着密码学、计算技术和安全威胁的不断变化,我们可以期待未来会有更多创新和改进的算法出现。

SHA算法与其他哈希算法的比较

SHA算法和其他哈希算法在密码学中都有其特定的应用场景和优缺点。以下是对SHA算法与其他常见哈希算法(如MD5、SHA-2等)的比较,以及它们在不同场景下的适用性分析。

MD5

优点:
  • 速度快:MD5算法的计算速度相对较快,适用于对速度要求较高的场景。
  • 兼容性:由于MD5使用较早,许多系统和应用已经集成了MD5算法。
缺点:
  • 安全性低:MD5已经被证明存在严重的碰撞漏洞,不再适合用于安全性要求高的场合。
  • 散列长度固定:MD5生成的散列值长度为128位,随着计算能力的提升,其安全性逐渐降低。
适用场景:
  • 数据完整性校验:在不涉及安全性的场合,MD5可以用于检查数据的完整性。
  • 快速哈希:对于不需要高安全性的场合,MD5由于其计算速度快,仍然有一定的使用价值。

SHA-2

优点:
  • 安全性高:SHA-2系列算法提供了比MD5更高的安全性,尤其是SHA-256和SHA-512。
  • 灵活性:SHA-2提供了多种散列长度(224、256、384、512位),可以根据需要选择合适的长度。
缺点:
  • 计算速度:相比于MD5,SHA-2的计算速度较慢,尤其是在较长散列长度时。
  • 算法复杂性:SHA-2算法的实现比MD5复杂,可能需要更多的计算资源。
适用场景:
  • 安全性要求高的场合:如数字签名、密码存储等。
  • 需要不同散列长度的场合:可以根据实际需求选择合适的散列长度。

SHA-3

优点:
  • 设计原理不同:SHA-3采用了与SHA-2不同的设计原理,提供了更高的安全性。
  • 抗碰撞性强:SHA-3在理论上具有更好的抗碰撞性。
缺点:
  • 计算速度:SHA-3通常比SHA-2慢,尤其是在某些实现中。
  • 兼容性和普及度:SHA-3相对较新,可能不如SHA-2普及。
适用场景:
  • 对安全性有极高要求的场合:如某些安全敏感型应用。
  • 需要多样化哈希算法的场合:为了提高整体安全性,可以同时使用SHA-2和SHA-3。

总结

在选择哈希算法时,需要根据应用场景的安全需求、计算资源、兼容性和速度等因素进行综合考虑。

  • 对于需要快速哈希且安全性要求不高的场景,MD5可能仍然适用。
  • 对于大多数安全性要求较高的场景,SHA-2是一个不错的选择,尤其是SHA-256。
  • 对于需要最高安全级别的场景,可以考虑使用SHA-3。

需要注意的是,随着技术的发展,过去被认为是安全的算法可能会变得不再安全,因此定期评估和更新使用的哈希算法是保持系统安全的重要措施。

实际案例分析

SHA算法在现实世界中有广泛的应用,尤其在数字货币领域和区块链技术中扮演着重要的角色。以下是SHA算法在这些领域的具体应用案例:

数字货币领域

比特币(Bitcoin)

比特币是使用SHA算法的一个典型例子。在比特币网络中,SHA-256算法被用于工作量证明(Proof of Work, PoW)机制,这是比特币网络中确认交易并创建新区块的过程。矿工通过解决一个基于SHA-256算法的加密难题来竞争记账权。成功解决问题的矿工将获得新生成的比特币作为奖励。

此外,SHA-256还被用于以下方面:

  • 生成比特币地址:比特币地址是通过将公钥进行SHA-256哈希,然后进行RIPEMD-160哈希生成的。
  • 确保交易完整性:每笔交易的输入和输出都会通过SHA-256进行哈希处理,以确保交易的完整性。
以太坊(Ethereum)

虽然以太坊在其PoW机制中使用了不同的算法(Ethash),但在智能合约和账户的创建中,SHA-256仍然有其应用。例如,以太坊的地址生成也涉及到SHA-3(KECCAK-256)算法的使用。

区块链技术

区块链的不可篡改性

区块链的不可篡改性依赖于哈希函数,尤其是SHA算法。每个区块都包含前一个区块的哈希值,这样就形成了一个连锁反应,确保了整个区块链的不可篡改性。如果某个区块被修改,那么它的哈希值就会改变,进而影响后续所有区块的哈希值。

智能合约

在以太坊等支持智能合约的区块链平台上,SHA算法用于确保智能合约代码的不可篡改性和验证交易数据的完整性。

实际案例:
  1. 供应链管理

    • 使用区块链技术来追踪商品从生产到消费的全过程。SHA算法可以确保供应链数据的完整性,防止数据被篡改。
  2. 身份验证

    • 在区块链身份验证系统中,用户的身份信息可以通过SHA算法进行哈希处理,以保护用户隐私,同时确保身份信息的真实性。
  3. 版权保护

    • 在数字版权管理(DRM)中,创作者可以将作品的内容通过SHA算法哈希后存储在区块链上,以证明作品的原创性和所有权。
  4. 投票系统

    • 在基于区块链的投票系统中,SHA算法可以用来确保选票的不可篡改性和匿名性。投票人的选择经过哈希处理后记录在区块链上。

通过这些案例,我们可以看到SHA算法在确保数据完整性、提供安全性、以及维护系统不可篡改性方面的重要作用。SHA算法的这些特性使其成为数字货币和区块链技术中的核心组件。

未来展望

SHA算法作为安全哈希算法的一种,虽然在多个领域有着广泛的应用,但随着技术的发展和计算能力的提升,其安全性、效率和隐私保护等方面可能会面临新的挑战。以下是SHA算法未来可能的发展趋势和改进方向,以及新的应用领域。

发展趋势和改进方向

  1. 安全性增强

    • 抗量子计算:随着量子计算的发展,现有的加密算法可能面临被破解的风险。未来SHA算法需要考虑对量子攻击的抵抗力,可能需要发展新的哈希算法,或者对现有算法进行量子安全的改造。
    • 抵抗碰撞攻击:尽管SHA算法设计之初就考虑了抗碰撞攻击,但随着攻击技术的发展,寻找更高效的抗碰撞算法是未来改进的方向。
  2. 效率提升

    • 算法优化:为了适应更多的应用场景,特别是在资源受限的环境中(如物联网设备),优化SHA算法的效率和资源消耗是必要的。
    • 硬件加速:通过专用硬件(如ASICs)来加速哈希计算,可以显著提高处理速度,降低能耗。
  3. 隐私保护

    • 零知识证明和多方计算:结合零知识证明和多方计算技术,SHA算法可以在保护隐私的同时进行数据验证。
    • 哈希函数的可逆性:研究可逆哈希函数,以便在不泄露原始数据的情况下进行数据验证。
  4. 标准化和多样性

    • 新的哈希标准:随着技术的发展,可能会出现新的哈希标准来满足不同应用的需求。
    • 算法多样性:为了避免单一算法可能存在的潜在风险,采用多种哈希算法组合使用,增加系统的整体安全性。

新的应用领域

  1. 隐私增强技术

    • 匿名支付系统:在数字货币和区块链应用中,SHA算法可以结合其他隐私保护技术,如环签名和零知识证明,以增强用户的匿名性。
    • 去中心化身份验证:在去中心化身份(DID)系统中,SHA算法可以用于保护用户身份信息,同时确保身份的可验证性。
  2. 数据完整性保护

    • 物联网数据安全:在物联网设备中,SHA算法可以用于确保数据的完整性和真实性,防止数据在传输过程中被篡改。
    • 云存储服务:在云存储服务中,SHA算法可以用来验证数据的完整性和一致性。
  3. 区块链技术的新应用

    • 跨链技术:SHA算法可以在不同的区块链之间提供数据一致性和安全性的保证。
    • 合规性和审计:在区块链应用中,SHA算法可以帮助实现自动化的合规性检查和审计过程。
  4. 网络安全

    • 数据防篡改:在网络安全领域,SHA算法可以用于检测数据是否被篡改,特别是在关键基础设施的数据保护中。

总之,SHA算法的未来发展将需要在保持其核心功能的同时,不断适应新的技术挑战和应用需求。随着技术的进步,我们可以期待更安全、更高效、更隐私保护的哈希算法的出现。

附录

SHA在线加密工具

SHA在线加密 | 一个覆盖广泛主题工具的高效在线平台(amd794.com)

https://amd794.com/sha

示例代码

下面我将提供一个使用Python内置库hashlib实现的SHA-256算法的代码示例。这个库封装了SHA-256算法的底层实现细节,但通过这个示例,你可以了解如何使用SHA-256算法来计算一个字符串的哈希值。

import hashlib

def sha256_hash(data):
    # 创建一个sha256哈希对象
    hash_object = hashlib.sha256()
    
    # 对数据进行编码,确保是字节串(bytes)
    data_encoded = data.encode('utf-8')
    
    # 使用哈希对象的update方法对数据进行哈希计算
    hash_object.update(data_encoded)
    
    # 获取16进制表示的哈希值
    hex_dig = hash_object.hexdigest()
    
    return hex_dig

# 示例数据
data = "Hello, World!"

# 计算并打印SHA-256哈希值
print("The SHA-256 hash of the data is:", sha256_hash(data))

在这个示例中,hashlib.sha256()创建了一个新的SHA-256哈希对象。然后,我们使用update()方法将编码后的数据传递给哈希对象,这会逐步处理数据。最后,hexdigest()方法返回了哈希值的十六进制表示。

如果你想了解更底层的实现细节,以下是一个简化的伪代码示例,展示了SHA-256算法的核心步骤:

# 以下变量是预定义的,具体值可以在参考信息[1]中找到
h0, h1, h2, h3, h4, h5, h6, h7 = initial_hash_values
k = [round_constant_0, round_constant_1, ..., round_constant_63]

def sha256(data):
    # 对数据进行填充操作,使其长度模512位为0
    data = pad(data)
    
    # 分块处理数据
    for chunk in chunks(data, 512):
        # 初始化消息调度数组w
        w = [0] * 64
        # 将chunk填充到消息调度数组中
        for i in range(16):
            w[i] = chunk[i]
        for i in range(16, 64):
            # 根据SHA-256算法的公式计算w[i]
            w[i] = some_computation(w[i-2], w[i-7], w[i-15], w[i-16])
        
        # 初始化工作变量
        a, b, c, d, e, f, g, h = h0, h1, h2, h3, h4, h5, h6, h7
        
        # 主循环
        for i in range(64):
            # 根据SHA-256算法的公式进行计算
            temp1 = some_computation(a, b, c, d, e, f, g, h, k[i], w[i])
            h = g
            g = f
            f = e
            e = d + temp1
            d = c
            c = b
            b = a
            a = temp1 + temp2  # temp2是上一步计算的一部分
        
        # 更新哈希值
        h0 = (h0 + a) % 2**32
        h1 = (h1 + b) % 2**32
        h2 = (h2 + c) % 2**32
        h3 = (h3 + d) % 2**32
        h4 = (h4 + e) % 2**32
        h5 = (h5 + f) % 2**32
        h6 = (h6 + g) % 2**32
        h7 = (h7 + h) % 2**32
    
    # 将最终的哈希值转换为16进制字符串
    return ''.join(format(x, '08x') for x in (h0, h1, h2, h3, h4, h5, h6, h7))

# 示例数据
data = "Hello, World!"

# 计算并打印SHA-256哈希值
print("The SHA-256 hash of the data is:", sha256(data))

请注意,上面的伪代码仅用于说明SHA-256算法的核心概念,它省略了实际的计算细节和函数实现。在实际应用中,你应该使用经过严格审查和测试的库,如Python的hashlib,来确保安全和正确性。

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

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

相关文章

车载终端设备主板方案_MTK平台智能后视镜行车记录仪PCBA定制开发

智能后视镜集成了车辆行车记录、倒车影像、AR实景导航、语音助手、ADAS辅助、云电子狗、蓝牙通话、影音娱乐等功能,为驾驶者提供全方位的驾驶辅助体验。 智能后视镜主板解决方案,采用了联发科MT6762八核处理器,拥有主频2.0GHz,采用…

Ubuntu与主机windows共享文件夹

一、创建共享文件夹: 虚拟机->设置->选项->共享文件夹->总是启用->选择本地的共享文件夹(如E:\Share)->确定。 二、设置挂载: 首先赋予/etc/fstab文件可编辑的权限; sudo chmod 777 /…

Langchain入门到实战-第二弹

Langchain入门到实战 Langchain快速入门官网地址Langchain概述Langchain调用大模型更新计划 Langchain快速入门 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://python.langchain.com/Langchain概述 LangChain是一个…

从旺店通·旗舰奇门到金蝶云星空通过接口配置打通数据

从旺店通旗舰奇门到金蝶云星空通过接口配置打通数据 对接系统旺店通旗舰奇门 慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS、SaaS模式,以一体化智能零售解决方案,帮助零售企业数字化智能化升级&#…

实时渲染 -- 流明(Lumen)

首先我们需要知道Lumen需要解决哪些问题。 很多人都会问,既然已经有了硬件的Raytracing ,我们为什么还要Lumen呢。这是由于很多硬件并不支持 Realtime Raytracing,对于支持的那些硬件, N 卡还算是勉强可以,而 A 卡支持…

科技感画册制作方法,视觉效果直接拉满

随着科技的不断进步,科技感画册制作也变得更加精彩和引人注目。通过巧妙地运用先进的设计工具和技术,以及结合创新的视觉元素,可以轻松地将画册的视觉效果直接拉满。 那你想知道怎么制作吗?现在我来教你这个方法吧,方法…

第二期书生浦语大模型训练营第三次笔记

RAG RAG是什么? RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺…

Unity开发holoLens2应用时的ProjectSettings配置

正确的进行Unity工程配置,才能进行后续的【发布】和【部署】操作… 本案例开发环境说明: Unity2021.3.18Win10VS2022HoloLens2 一、平台设置 二、Quality画面质量设置 三、Player玩家设置 四、XR-Plug设置 五、环境测试 导入一个官方demo&#xff0c…

安装jmeter和ant

安装jmeter和ant 安装java环境 安装jdk和jre 下载Java SE Development Kit 8 Java SE subscribers will receive JDK 8 updates until at least December 2030. 选择指定包进行安装,如windows 共享账号参考:Oracle官网 账号及密码 目前官网下载低…

论文速读:Do Generated Data Always Help Contrastive Learning?

在对比学习领域,最近很多研究利用高质量生成模型来提升对比学习 给定一个未标记的数据集,在其上训练一个生成模型来生成大量的合成样本,然后在真实数据和生成数据的组合上执行对比学习这种使用生成数据的最简单方式被称为“数据膨胀”这与数据…

Android,AMS、WMS、PKMS添加动态控制debug开关功能

问题背景 在framework源码中有很多debug开关,通常我们想要看某个模块的日志,比如说广播,就需要去修改源码,把对应的debug值改为true,但是这种方法耗时耗力,比如说我想看sendBroadcast的流程,但是BroadcastQueue中有很多debug开关,如下: 这种就需要去修改对应的源码才…

消费增值新模式:让每一分钱都更有价值

亲爱的消费者们,大家好!今天我想和大家探讨一种新颖的消费方式——消费增值,它让您的每一次消费都蕴含了额外的价值,让消费变得更加有意义。 在过往的消费观念里,我们往往只是简单地将钱花出去,购买所需的商…

文件传输工具WinSCP安装与使用教程

目录 一、WinSCP下载 二、WinSCP安装 三、WinSCP使用 WinSCP介绍: WinSCP 是一个 Windows 环境下使用的 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议。它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。 一、WinSCP下…

图片壁纸社区app前后端开源小程序源码

图片壁纸社区APP前后端开源小程序源码,修改了开源版的前端样式,变成图片社区,也可以用来作为壁纸 源码下载地址抄笔记 (chaobiji.cn)

SpringBoot与Vue前后分离项目中返回结果为Long类型精度丢失问题处理

SpringBoot与Vue前后分离项目中返回结果为Long类型精度丢失问题处理 文章目录 SpringBoot与Vue前后分离项目中返回结果为Long类型精度丢失问题处理1. 前后分离环境1. 表结构2. 实体类 2. 问题描述3. 原因分析4. 处理方法(后端)1. 处理方式1(JsonSerialize注解)2. 处理方式2(Jso…

【InternLM 实战营第二期笔记01】书生·浦语大模型全链路开源体系+InternLM2技术报告

本次课程链接在GitHub上:InternLM/Tutorial at camp2 (github.com) 第一次课程录播链接:书生浦语大模型全链路开源体系_哔哩哔哩_bilibili InternLM2技术报告:arxiv.org/pdf/2403.17297.pdf 一、书生浦语大模型全链路开源体系笔记 Intern…

STM32H7的MPU学习和应用示例

STM32H7的MPU学习记录 什么是MPU?MPU的三种内存类型内存映射MPU保护区域以及优先级 MPU的寄存器XN位AP位TEX、C、B、S位SRD 位SIZE 位CTRL 寄存器的各个位 示例总结 什么是MPU? MPU(Memory Protection Unit,内存保护单元&#xf…

docker安装并跑通跑通QQ机器人实践(1)-前言及展示

随着大模型技术的迅猛发展,行业应用日益丰富且专业化。为了有效利用大模型的强大功能,建立与之紧密互动的应用接口至关重要。在此背景下,QQ、微信、钉钉等主流即时通讯工具凭借其广泛的用户覆盖和便捷的通信特性,成为连接用户与大…

动画渲染多少钱一秒?云渲染一分钟动画费用

动画渲染的费用因其复杂度和技术要求而异,云渲染服务则提供了一种高效的解决方案。一般而言,渲染一分钟动画的费用可能从几百到几千元不等,具体取决于使用的资源和渲染质量。下面来看看相关费用吧。 动画渲染多少钱一秒? 参考:…

更改android 安装的sdk版本

打开sdk manager 勾选show details 就可以选择了。