当前位置: 首页 > news >正文

哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础

文章目录

  • 一、密码哈希函数概述
    • 1.1 哈希函数的基本概念
    • 1.2 哈希函数在数据安全中的应用
  • 二、SHA-2系列算法详解
    • 2.1 SHA-2的起源与发展
    • 2.2 SHA-256技术细节与实现
    • 2.3 SHA-384和SHA-512的特点
    • 2.4 SHA-2系列算法的安全性评估
  • 三、SHA-3系列算法详解
    • 3.1 SHA-3的起源与设计理念
    • 3.2 Keccak海绵函数构造
    • 3.3 SHA-3标准变体详解
    • 3.4 SHA-3与SHA-2的比较
  • 四、SM3国密算法详解
    • 4.1 SM3的背景与标准化
    • 4.2 SM3算法的技术细节
    • 4.3 SM3在国内信息系统中的应用
    • 4.4 SM3与国际算法的安全性比较
  • 五、密码杂凑函数的高级应用
  • 六、密码杂凑函数的安全挑战与最佳实践
    • 6.1 常见攻击与防御
    • 6.2 密码存储最佳实践
    • 6.3 密钥管理最佳实践
    • 6.4 未来发展趋势
  • 七、实战应用案例—— 构建简单的区块链
  • 八、总结与未来展望
  • 附录:专业名词表


同系列:

  • 对称加密算法(AES、ChaCha20和SM4)Python实现——密码学基础(Python出现No module named “Crypto” 解决方案)
  • 非对称加密算法(RSA、ECC、SM2)——密码学基础

一、密码哈希函数概述

1.1 哈希函数的基本概念

哈希函数是现代密码学的基石,它将任意长度的输入(通常称为"消息"或"数据")转换为固定长度的输出(称为"哈希值"、“消息摘要"或"指纹”)。一个高质量的密码哈希函数应满足以下核心特性:

  • 单向性:给定哈希值,计算上不可能逆向推导出原始输入
  • 抗碰撞性:计算上难以找到两个不同的输入产生相同的哈希值
  • 雪崩效应:输入的微小变化会导致哈希值的显著不同
  • 确定性:相同的输入始终产生相同的哈希值
  • 计算效率:计算哈希值的过程应该高效

1.2 哈希函数在数据安全中的应用

密码哈希函数在数据安全领域有广泛的应用:

  • 密码存储:存储用户密码的哈希值而非明文
  • 数据完整性验证:检测数据是否被篡改
  • 数字签名:作为数字签名算法的组成部分
  • 区块链技术:作为工作量证明算法的基础
  • 随机数生成:用于生成高质量的随机数
  • 文件或消息校验:验证文件或消息是否被修改

二、SHA-2系列算法详解

2.1 SHA-2的起源与发展

SHA-2(Secure Hash Algorithm 2)是由美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST)于2001年发布的一系列密码哈希函数。SHA-2是对早期SHA-1算法的改进,旨在提供更强的安全性。

SHA-2系列包括多个变体,主要区别在于摘要长度和内部状态大小:

  • SHA-224:输出224位(28字节)摘要
  • SHA-256:输出256位(32字节)摘要
  • SHA-384:输出384位(48字节)摘要
  • SHA-512:输出512位(64字节)摘要
  • SHA-512/224和SHA-512/256:基于SHA-512截断的变体

2.2 SHA-256技术细节与实现

SHA-256是SHA-2系列中最常用的变体,它处理任意长度的消息并生成256位的消息摘要。

SHA-256的工作原理

SHA-256的处理流程包括以下步骤:

  1. 填充消息:将原始消息填充至512位的倍数
  2. 分块处理:将填充后的消息分为512位的块
  3. 初始化哈希值:使用8个32位常数初始化哈希状态
  4. 压缩函数:对每个块应用压缩函数,更新哈希状态
  5. 输出处理:最终哈希状态即为256位消息摘要

SHA-256使用的核心操作包括:

  • 位运算(AND、OR、XOR)
  • 循环右移(ROTR)
  • 逻辑函数(Ch、Maj、Σ0、Σ1、σ0、σ1)
  • 常量表(64个32位常数,由素数的立方根小数部分生成)

SHA-256的Python实现示例

import hashlibdef sha256_example():# 创建SHA-256哈希对象sha256_hash = hashlib.sha256()# 更新哈希对象with要哈希的数据message = "这是一条需要进行哈希处理的消息"sha256_hash.update(message.encode('utf-8'))# 获取哈希值(十六进制字符串形式)hash_value = sha256_hash.hexdigest()print(f"原始消息: {message}")print(f"SHA-256哈希值: {hash_value}")# 演示雪崩效应 - 改变一个字符message_modified = "这是一条需要进行哈希处理的消急"  # 将"息"改为"急"sha256_hash_modified = hashlib.sha256()sha256_hash_modified.update(message_modified.encode('utf-8'))hash_value_modified = sha256_hash_modified.hexdigest()print(f"修改后消息: {message_modified}")print(f"修改后SHA-256哈希值: {hash_value_modified}")# 检查两个哈希值有多少位不同(汉明距离)import binasciihash1 = binascii.unhexlify(hash_value)hash2 = binascii.unhexlify(hash_value_modified)bit_diff = sum(bin(b1 ^ b2).count('1') for b1, b2 in zip(hash1, hash2))print(f"哈希值位差异: {bit_diff}/256位 ({bit_diff/256*100:.2f}%)")sha256_example()

在这里插入图片描述

2.3 SHA-384和SHA-512的特点

SHA-384和SHA-512在处理较长消息时提供更高的安全性,它们的主要特点包括:

  • 更大的字长:使用64位字而非SHA-256的32位字
  • 更多的轮数:压缩函数包含80轮而非SHA-256的64轮
  • 更大的内部状态:SHA-512使用8个64位字(共512位)的内部状态
  • 更长的摘要:SHA-384输出384位摘要,SHA-512输出512位摘要

SHA-384本质上是SHA-512的截断版本,使用不同的初始值,并只输出前384位结果。

SHA-512的Python实现示例

import hashlib
import timedef compare_sha_algorithms():# 准备一个大文件数据模拟data = b"0" * 10000000  # 约10MB的数据# 测试SHA-256start = time.time()sha256_hash = hashlib.sha256(data).hexdigest()sha256_time = time.time() - start# 测试SHA-384start = time.time()sha384_hash = hashlib.sha384(data).hexdigest()sha384_time = time.time() - start# 测试SHA-512start = time.time()sha512_hash = hashlib.sha512(data).hexdigest()sha512_time = time.time() - startprint(f"SHA-256 哈希值: {sha256_hash[:16]}... (长度: {len(sha256_hash)*4}位)")print(f"SHA-256 处理时间: {sha256_time:.4f}秒")print()print(f"SHA-384 哈希值: {sha384_hash[:16]}... (长度: {len(sha384_hash)*4}位)")print(f"SHA-384 处理时间: {sha384_time:.4f}秒")print()print(f"SHA-512 哈希值: {sha512_hash[:16]}... (长度: {len(sha512_hash)*4}位)")print(f"SHA-512 处理时间: {sha512_time:.4f}秒")compare_sha_algorithms()

在这里插入图片描述

2.4 SHA-2系列算法的安全性评估

截至2025年,SHA-2系列算法仍被认为是安全的,尚未有实际的碰撞攻击被发现。然而,随着计算能力的提升,以下几点值得注意:

  • SHA-256提供约128位的碰撞攻击安全强度
  • SHA-384和SHA-512提供约192位和256位的碰撞攻击安全强度
  • 针对SHA-256的理论攻击已将全攻击轮数从64轮降至52轮
  • 量子计算的发展可能会对SHA-2的安全性构成威胁

在选择SHA-2系列算法时,应根据安全需求和性能考虑:

  • 对于一般应用,SHA-256通常已足够安全
  • 对于高安全需求场景,建议使用SHA-384或SHA-512
  • 在64位系统上,SHA-512可能比SHA-256更快

三、SHA-3系列算法详解

3.1 SHA-3的起源与设计理念

SHA-3(Secure Hash Algorithm 3)是NIST于2015年发布的最新哈希标准,它基于Keccak(发音为"ketch-ack")算法,由Joan Daemen、Guido Bertoni、Gilles Van Assche和Michaël Peeters设计。

SHA-3的设计有几个重要目标:

  • 提供与SHA-2完全不同的设计,作为密码学多样性的"保险策略"
  • 抵抗量子计算的Grover算法攻击
  • 支持灵活的安全级别和输出长度
  • 提供创新的海绵结构,可扩展到更多功能

3.2 Keccak海绵函数构造

Keccak的核心是"海绵函数"(sponge function)构造,这是一种革命性的密码学原语,可用于构建哈希函数、伪随机数生成器、认证加密等多种功能。

海绵函数的工作原理

海绵函数包含两个阶段:

  1. 吸收阶段(Absorbing):将输入消息分块并依次吸收到内部状态中
  2. 挤出阶段(Squeezing):从内部状态中提取任意长度的输出

海绵函数的内部状态由两部分组成:

  • 容量(Capacity)部分:提供安全性,对外不可见
  • 比特率(Bitrate)部分:与外部交互

Keccak-f置换函数

Keccak的核心是Keccak-f[b]置换函数,其中b是状态大小(1600位是标准实现)。置换函数包括五个步骤,统称为"轮"(round):

  1. θ (theta)步骤:通过列奇偶校验实现扩散
  2. ρ (rho)步骤:位旋转操作提供扩散
  3. π (pi)步骤:位置置换操作提供扩散
  4. χ (chi)步骤:非线性映射提供混淆
  5. ι (iota)步骤:添加轮常量,打破对称性

3.3 SHA-3标准变体详解

NIST标准化的SHA-3包括四个哈希函数和两个可扩展输出函数(XOFs):

标准哈希函数

  • SHA3-224:输出224位(28字节)摘要
  • SHA3-256:输出256位(32字节)摘要
  • SHA3-384:输出384位(48字节)摘要
  • SHA3-512:输出512位(64字节)摘要

这些函数使用不同的容量值来提供相应的安全级别。

可扩展输出函数(XOFs)

  • SHAKE128:容量为256位,可产生任意长度输出,提供128位安全强度
  • SHAKE256:容量为512位,可产生任意长度输出,提供256位安全强度

可扩展输出函数的特点是可以生成任意长度的输出,这在某些应用场景非常有用。

SHA-3的Python实现示例

import hashlib
from Crypto.Hash import SHA3_256, SHA3_512, SHAKE128, SHAKE256def sha3_example():message = "这是一条需要进行SHA-3哈希处理的消息"encoded_message = message.encode('utf-8')# 使用hashlib模块(Python 3.6+)print("使用hashlib模块:")sha3_256_hash = hashlib.sha3_256(encoded_message).hexdigest()sha3_512_hash = hashlib.sha3_512(encoded_message).hexdigest()print(f"SHA3-256: {sha3_256_hash}")print(f"SHA3-512: {sha3_512_hash}")# 使用PyCryptodome库进行SHAKE操作print("\n使用PyCryptodome库:")# SHAKE128 - 生成32字节(256位)输出shake128_obj = SHAKE128.new(encoded_message)shake128_hash = shake128_obj.read(32).hex()# SHAKE256 - 生成64字节(512位)输出shake256_obj = SHAKE256.new(encoded_message)shake256_hash = shake256_obj.read(64).hex()print(f"SHAKE128 (256位输出): {shake128_hash}")print(f"SHAKE256 (512位输出): {shake256_hash}")# 演示SHAKE的可变长度输出print("\nSHAKE256可变长度输出示例:")for length in [16, 32, 64, 128]:  # 字节长度shake256_obj = SHAKE256.new(encoded_message)shake256_hash = shake256_obj.read(length).hex()print(f"SHAKE256 ({length*8}位输出): {shake256_hash[:32]}... (总长度: {length*2}字符)")# 需要安装PyCryptodome库:pip install pycryptodome
sha3_example()

在这里插入图片描述

3.4 SHA-3与SHA-2的比较

SHA-3和SHA-2在设计和性能方面有显著差异:

特性SHA-2SHA-3
设计结构Merkle–Damgård结构海绵结构
安全性依据压缩函数的抗碰撞性置换函数的差分/线性密码分析抗性
长度扩展攻击易受攻击天然抵抗
性能(软件)通常更快略慢
性能(硬件)资源需求较高资源需求低,适合资源受限设备
量子计算抗性中等(需加倍输出长度)强(设计考虑了量子攻击)
灵活性固定输出长度支持可变长度输出(SHAKE)

选择SHA-2还是SHA-3应根据具体应用场景:

  • 对于大多数应用,SHA-2(特别是SHA-256)仍是良好选择
  • 对于需要防范长度扩展攻击的场景,SHA-3更适合
  • 对于需要可变长度输出的场景,SHAKE函数是理想选择
  • 对于资源受限的硬件实现,SHA-3通常更有效率

四、SM3国密算法详解

4.1 SM3的背景与标准化

SM3是中国国家密码管理局于2010年发布的密码杂凑算法标准(GB/T 32905-2016),是中国商用密码算法体系(即"国密"标准)的重要组成部分。SM3算法设计目标是替代MD5和SHA-1等国际算法,提供自主可控的密码技术保障。

SM3算法特点:

  • 输出256位(32字节)消息摘要
  • 基于Merkle–Damgård结构设计
  • 针对中国应用环境优化
  • 安全强度与SHA-256相当

4.2 SM3算法的技术细节

SM3的处理流程类似于SHA-256,但内部结构有显著差异:

  1. 填充:类似SHA-256,但填充规则略有不同
  2. 消息扩展:将消息块扩展为132个32位字(而非SHA-256的64个)
  3. 压缩函数:基于8个32位字的状态,包含64轮变换
  4. 非线性函数:使用两种不同的非线性函数(前16轮和后48轮不同)
  5. 常量:使用不同的常量表

SM3的主要创新点包括:

  • 消息扩展部分引入了复杂的非线性操作
  • 采用了"消息置换"技术增强混淆能力
  • 压缩函数中使用了更复杂的逻辑运算

SM3的Python实现示例

# 需要安装gmssl库:pip install gmssl
from gmssl import sm3, funcdef sm3_example():# 准备消息message = "这是一条需要进行SM3哈希处理的消息"encoded_message = message.encode('utf-8')# 计算SM3哈希值sm3_hash = sm3.sm3_hash(func.bytes_to_list(encoded_message))print(f"原始消息: {message}")print(f"SM3哈希值: {sm3_hash}")# 演示雪崩效应message_modified = "这是一条需要进行SM3哈希处理的消急"  # 将"息"改为"急"encoded_modified = message_modified.encode('utf-8')sm3_hash_modified = sm3.sm3_hash(func.bytes_to_list(encoded_modified))print(f"修改后消息: {message_modified}")print(f"修改后SM3哈希值: {sm3_hash_modified}")# 计算哈希值的差异(汉明距离)import binasciihash1 = binascii.unhexlify(sm3_hash)hash2 = binascii.unhexlify(sm3_hash_modified)bit_diff = sum(bin(b1 ^ b2).count('1') for b1, b2 in zip(hash1, hash2))print(f"哈希值位差异: {bit_diff}/256位 ({bit_diff/256*100:.2f}%)")sm3_example()

在这里插入图片描述

4.3 SM3在国内信息系统中的应用

SM3已广泛应用于中国的金融、政务和关键信息基础设施中:

  • 银行和金融系统:网上银行交易验证、支付系统完整性校验
  • 电子政务:电子公文传输、数据交换完整性保障
  • 电子认证:数字证书生成、CRL(证书吊销列表)签名
  • 区块链应用:国内联盟链和许可链中的哈希算法
  • 云计算:数据完整性校验和身份认证

使用SM3的主要优势:

  • 符合国家密码管理要求,支持等级保护合规
  • 算法公开透明,经过严格的安全性分析
  • 在国产芯片和密码卡上有优化实现
  • 与其他国密算法(如SM2、SM4)无缝衔接

4.4 SM3与国际算法的安全性比较

SM3与SHA-256的安全性比较:

安全属性SM3SHA-256
输出长度256位256位
碰撞攻击安全强度约128位约128位
抗原像攻击强度约256位约256位
最佳攻击结果理论突破至28轮(总64轮)理论突破至52轮(总64轮)
抵抗长度扩展攻击不抵抗(需要额外措施)不抵抗(需要额外措施)
量子计算抗性中等(需加倍输出长度)中等(需加倍输出长度)

选择SM3的考虑因素:

  • 需要满足中国监管要求的应用必须使用SM3
  • 安全强度与SHA-256相当,可作为等效替代
  • 在国产密码硬件上性能优势明显
  • 与其他国密标准(如SM2签名算法)配合使用时效率更高

五、密码杂凑函数的高级应用

这一部分作为了解吧,代码自行学习吧。

5.1 HMAC:基于哈希的消息认证码

HMAC(Hash-based Message Authentication Code)是一种结合密码哈希函数和共享密钥的认证技术,可以同时验证消息的完整性和来源身份。

HMAC的工作原理

HMAC的计算公式为:

HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))

其中:

  • K 是密钥
  • K’ 是从K派生的密钥(如果K太长则哈希,如果太短则填充)
  • m 是消息
  • H 是哈希函数(如SHA-256)
  • opad 和 ipad 是外部和内部填充常量
  • ⊕ 表示异或操作
  • || 表示连接操作

5.2 密钥派生函数(KDF)

密钥派生函数(Key Derivation Function, KDF)用于从主密钥或密码生成密码学安全的密钥材料。

PBKDF2(基于密码的密钥派生函数)

PBKDF2通过反复哈希密码和盐值来增加破解难度,适用于密码存储和从密码生成加密密钥。

HKDF(HMAC基础密钥派生函数)

HKDF适用于从高熵输入(如共享密钥)派生多个密钥,通常用于密码协议。

5.3 基于哈希的承诺方案

承诺方案(Commitment Scheme)允许一方承诺一个值,而在以后才揭示该值。哈希函数是构建承诺方案的理想工具。

5.4 布隆过滤器

布隆过滤器是一种空间效率高的概率数据结构,使用多个哈希函数来检测元素是否在集合中。


六、密码杂凑函数的安全挑战与最佳实践

6.1 常见攻击与防御

彩虹表攻击

彩虹表是一种预计算的哈希值查找表,用于加速密码破解。

防御措施

  • 使用盐值使相同密码产生不同哈希值
  • 使用慢哈希函数增加预计算表的构建成本
  • 定期更新哈希算法和参数

长度扩展攻击

长度扩展攻击是针对基于Merkle–Damgård构造的哈希函数(如SHA-2、SM3)的攻击,攻击者可以在不知道消息内容的情况下构造出扩展消息的有效哈希值。

防御措施

  • 使用HMAC而非简单哈希
  • 使用不易受此类攻击的哈希函数(如SHA-3)
  • 双重哈希:H(H(secret || message))

量子计算威胁

量子计算对哈希函数的主要威胁是Grover算法,它可以将暴力搜索的复杂度从O(2^n) 降低至 O(2^(n/2))。

防御措施

  • 使用输出长度加倍的哈希函数
  • 关注和采用后量子密码学研究成果
  • 使用SHA-3等设计考虑了量子抗性的算法

6.2 密码存储最佳实践

import hashlib
import os
import base64
import time
from passlib.hash import argon2, pbkdf2_sha256, bcryptdef password_hashing_comparison():# 测试不同的密码哈希技术password = "用户密码123"print("=== 不安全的哈希方法(请勿使用) ===")# 1. 纯MD5(极不安全)start = time.time()md5_hash = hashlib.md5(password.encode()).hexdigest()md5_time = time.time() - startprint(f"MD5: {md5_hash}")print(f"计算时间: {md5_time:.6f}秒")# 2. 纯SHA-256(不推荐)start = time.time()sha256_hash = hashlib.sha256(password.encode()).hexdigest()sha256_time = time.time() - startprint(f"\nSHA-256: {sha256_hash}")print(f"计算时间: {sha256_time:.6f}秒")print("\n=== 推荐的密码哈希方法 ===")# 3. PBKDF2start = time.time()salt = os.urandom(16)iterations = 100000pbkdf2_hash = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, iterations)pbkdf2_hash_b64 = base64.b64encode(pbkdf2_hash).decode()salt_b64 = base64.b64encode(salt).decode()pbkdf2_time = time.time() - startprint(f"PBKDF2 (SHA-256, {iterations}次迭代):")print(f"盐值: {salt_b64}")print(f"哈希值: {pbkdf2_hash_b64}")print(f"计算时间: {pbkdf2_time:.6f}秒")# 4. Bcrypt(推荐)start = time.time()bcrypt_hash = bcrypt.hash(password)bcrypt_time = time.time() - startprint(f"\nBcrypt:")print(f"哈希+盐值: {bcrypt_hash}")print(f"计算时间: {bcrypt_time:.6f}秒")# 5. Argon2(最推荐)start = time.time()argon2_hash = argon2.hash(password)argon2_time = time.time() - startprint(f"\nArgon2:")print(f"哈希+参数: {argon2_hash}")print(f"计算时间: {argon2_time:.6f}秒")# 验证各方法print("\n=== 验证各方法 ===")# 验证PBKDF2start = time.time()pbkdf2_verify = hashlib.pbkdf2_hmac('sha256', password.encode(), base64.b64decode(salt_b64), iterations)pbkdf2_verify_b64 = base64.b64encode(pbkdf2_verify).decode()pbkdf2_is_valid = pbkdf2_verify_b64 == pbkdf2_hash_b64pbkdf2_verify_time = time.time() - startprint(f"PBKDF2验证: {'成功' if pbkdf2_is_valid else '失败'}")print(f"验证时间: {pbkdf2_verify_time:.6f}秒")# 验证Bcryptstart = time.time()bcrypt_is_valid = bcrypt.verify(password, bcrypt_hash)bcrypt_verify_time = time.time() - startprint(f"Bcrypt验证: {'成功' if bcrypt_is_valid else '失败'}")print(f"验证时间: {bcrypt_verify_time:.6f}秒")# 验证Argon2start = time.time()argon2_is_valid = argon2.verify(password, argon2_hash)argon2_verify_time = time.time() - startprint(f"Argon2验证: {'成功' if argon2_is_valid else '失败'}")print(f"验证时间: {argon2_verify_time:.6f}秒")# 需要安装passlib库:pip install passlib
password_hashing_comparison()

密码存储最佳实践要点:

  1. 永不存储明文密码:任何情况下都不要存储用户密码的明文。
  2. 使用慢哈希算法:选择专为密码哈希设计的算法,如Argon2(首选)、bcrypt或PBKDF2。
  3. 每个密码都使用唯一盐值:盐值应随机生成并与哈希一起存储。
  4. 调整算法参数:根据系统性能需求和安全要求调整工作因子、内存成本、并行度等参数。
  5. 安全升级路径:设计系统时考虑将来可能需要升级哈希算法。
  6. 限制登录尝试:实施账户锁定或延迟策略,防止暴力破解。
    在这里插入图片描述

6.3 密钥管理最佳实践

密码哈希函数在密钥管理中的使用应遵循以下最佳实践:

  1. 密钥分层:使用主密钥派生多个用途特定的子密钥。
  2. 密钥轮换:定期更换密钥,降低泄露影响。
  3. 安全密钥存储:使用HSM(硬件安全模块)或安全密钥管理系统。
  4. 密钥备份:实施安全的密钥备份和恢复机制。
  5. 访问控制:限制对密钥的访问,实施最小权限原则。
  6. 密钥派生:使用标准化的密钥派生函数。
  7. 监控与审计:记录所有密钥操作并监控异常行为。

以下是一个密钥分层示例:

import os
import hmac
import hashlib
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
from cryptography.hazmat.primitives import hashes
import binasciidef key_hierarchy_example():# 1. 主密钥(通常存储在HSM或安全存储中)master_key = os.urandom(32)  # 256位随机主密钥print("=== 密钥层次结构示例 ===")print(f"主密钥 (256位): {binascii.hexlify(master_key).decode()}")# 2. 派生域分隔密钥encryption_domain_key = derive_domain_key(master_key, b"encryption", 32)authentication_domain_key = derive_domain_key(master_key, b"authentication", 32)storage_domain_key = derive_domain_key(master_key, b"storage", 32)print("\n=== 域密钥 ===")print(f"加密域密钥: {binascii.hexlify(encryption_domain_key).decode()}")print(f"认证域密钥: {binascii.hexlify(authentication_domain_key).decode()}")print(f"存储域密钥: {binascii.hexlify(storage_domain_key).decode()}")# 3. 派生应用特定密钥app1_key = derive_app_key(encryption_domain_key, b"app1", 32)app2_key = derive_app_key(encryption_domain_key, b"app2", 32)database_hmac_key = derive_app_key(authentication_domain_key, b"database", 32)api_hmac_key = derive_app_key(authentication_domain_key, b"api", 32)print("\n=== 应用特定密钥 ===")print(f"应用1加密密钥: {binascii.hexlify(app1_key).decode()}")print(f"应用2加密密钥: {binascii.hexlify(app2_key).decode()}")print(f"数据库HMAC密钥: {binascii.hexlify(database_hmac_key).decode()}")print(f"API HMAC密钥: {binascii.hexlify(api_hmac_key).decode()}")# 4. 模拟密钥轮换(基于版本号)current_version = 2versioned_app1_key_v1 = derive_versioned_key(app1_key, 1, 32)versioned_app1_key_v2 = derive_versioned_key(app1_key, 2, 32)print("\n=== 密钥轮换 ===")print(f"应用1密钥 v1: {binascii.hexlify(versioned_app1_key_v1).decode()}")print(f"应用1密钥 v2 (当前): {binascii.hexlify(versioned_app1_key_v2).decode()}")# 5. 会话密钥派生session_id = os.urandom(16)  # 随机会话IDsession_key = derive_session_key(app1_key, session_id, 16)print("\n=== 临时会话密钥 ===")print(f"会话ID: {binascii.hexlify(session_id).decode()}")print(f"会话密钥: {binascii.hexlify(session_key).decode()}")def derive_domain_key(master_key, domain, length):"""从主密钥派生域特定密钥"""hkdf = HKDF(algorithm=hashes.SHA256(),length=length,salt=None,  # 可选:使用固定盐值info=b"domain_key_" + domain,)return hkdf.derive(master_key)def derive_app_key(domain_key, app_id, length):"""从域密钥派生应用特定密钥"""hkdf = HKDF(algorithm=hashes.SHA256(),length=length,salt=None,info=b"app_key_" + app_id,)return hkdf.derive(domain_key)def derive_versioned_key(base_key, version, length):"""派生特定版本的密钥"""version_info = f"v{version}".encode()hkdf = HKDF(algorithm=hashes.SHA256(),length=length,salt=None,info=b"version_" + version_info,)return hkdf.derive(base_key)def derive_session_key(app_key, session_id, length):"""派生临时会话密钥"""hkdf = HKDF(algorithm=hashes.SHA256(),length=length,salt=session_id,  # 使用会话ID作为盐值info=b"session_key",)return hkdf.derive(app_key)key_hierarchy_example()

在这里插入图片描述

6.4 未来发展趋势

随着计算技术的发展,密码杂凑函数领域的未来趋势包括:

  1. 后量子密码学:研发抵抗量子计算攻击的哈希算法
  2. 可验证延迟函数:在密码学证明和共识机制中的应用
  3. 轻量级密码学:适用于IoT设备的高效哈希函数
  4. 零知识证明:与哈希函数结合,提供更强的隐私保护
  5. 可调节安全参数:根据威胁模型动态调整算法参数
  6. 同态哈希:支持在加密数据上进行计算

七、实战应用案例—— 构建简单的区块链

import hashlib
import time
import json
from datetime import datetimeclass Block:def __init__(self, index, previous_hash, timestamp, data, difficulty=4):self.index = indexself.previous_hash = previous_hashself.timestamp = timestampself.data = dataself.difficulty = difficultyself.nonce = 0self.hash = self.calculate_hash()def calculate_hash(self):block_string = json.dumps({"index": self.index,"previous_hash": self.previous_hash,"timestamp": self.timestamp,"data": self.data,"nonce": self.nonce}, sort_keys=True).encode()return hashlib.sha256(block_string).hexdigest()def mine_block(self):target = "0" * self.difficultywhile self.hash[:self.difficulty] != target:self.nonce += 1self.hash = self.calculate_hash()print(f"Block #{self.index} mined: {self.hash}")return self.hashclass Blockchain:def __init__(self, difficulty=4):self.chain = []self.difficulty = difficulty# 创建创世区块self.create_genesis_block()def create_genesis_block(self):genesis_block = Block(0, "0", time.time(), "创世区块")genesis_block.mine_block()self.chain.append(genesis_block)def get_latest_block(self):return self.chain[-1]def add_block(self, data):latest_block = self.get_latest_block()new_block = Block(index=latest_block.index + 1,previous_hash=latest_block.hash,timestamp=time.time(),data=data,difficulty=self.difficulty)new_block.mine_block()self.chain.append(new_block)return new_blockdef is_chain_valid(self):for i in range(1, len(self.chain)):current_block = self.chain[i]previous_block = self.chain[i-1]# 验证当前区块哈希if current_block.hash != current_block.calculate_hash():print(f"Block #{current_block.index} has invalid hash")return False# 验证链接关系if current_block.previous_hash != previous_block.hash:print(f"Block #{current_block.index} has invalid previous hash")return Falsereturn Truedef print_blockchain(self):print("\n=== 区块链状态 ===")for block in self.chain:print(f"区块 #{block.index}")print(f"时间戳: {datetime.fromtimestamp(block.timestamp).strftime('%Y-%m-%d %H:%M:%S')}")print(f"数据: {block.data}")print(f"前一区块哈希: {block.previous_hash}")print(f"Hash: {block.hash}")print(f"Nonce: {block.nonce}")print()def blockchain_example():# 创建一个新的区块链blockchain = Blockchain(difficulty=4)print("开始挖掘区块...")# 添加一些区块blockchain.add_block("A给B转账10个币")blockchain.add_block("B给C转账5个币")blockchain.add_block("D给A转账2个币")# 打印区块链blockchain.print_blockchain()# 验证区块链is_valid = blockchain.is_chain_valid()print(f"区块链验证: {'有效' if is_valid else '无效'}")# 尝试篡改区块链print("\n尝试篡改区块链...")blockchain.chain[1].data = "A给B转账100个币"  # 篡改数据# 重新验证is_valid = blockchain.is_chain_valid()print(f"篡改后区块链验证: {'有效' if is_valid else '无效'}")blockchain_example()

在这里插入图片描述


八、总结与未来展望

密码学未来趋势

随着计算技术和攻击方法的不断发展,密码学将持续演进:

  1. 后量子密码学:随着量子计算机的发展,传统密码算法面临挑战,需要开发抗量子攻击的新型算法。

  2. 轻量级密码学:物联网设备的普及需要资源消耗低但安全性高的密码算法。

  3. 同态加密与零知识证明:这些技术将使数据在加密状态下仍可进行计算和验证,革新数据处理方式。

  4. 基于格和格子的密码学:这些数学结构将成为构建后量子密码算法的重要基础。

  5. 混合密码学系统:结合不同类型的密码算法,提供多层次防护。

数据安全的核心原则

无论技术如何变化,数据安全的核心原则始终不变:

  1. 纵深防御:永远不要依赖单一安全措施,而是构建多层次的防护系统。

  2. 最小权限原则:只授予完成任务所需的最小权限。

  3. 默认安全:系统应默认处于最安全的配置状态。

  4. 透明性:安全机制应该是开放和可验证的,不要依赖"隐藏"来获取安全性。

  5. 及时更新:保持系统和算法的及时更新,以应对新的威胁。

  6. 可用性与安全性平衡:过度的安全措施可能影响用户体验,需要找到平衡点。

  7. 预防与检测并重:除了预防措施,还需建立有效的检测和响应机制。


附录:专业名词表

A

  • AES-GCM(Advanced Encryption Standard - Galois/Counter Mode):一种提供认证加密的模式,同时保证机密性和完整性
  • 抗碰撞性(Collision Resistance):哈希函数的性质,难以找到两个不同输入产生相同输出

B

  • 彩虹表(Rainbow Table):一种预计算的查找表,用于加速密码破解
  • 比特率(Bitrate):海绵函数中与外部交互的状态部分
  • 布隆过滤器(Bloom Filter):一种空间效率高的概率数据结构,用于检测元素是否在集合中

C

  • 容量(Capacity):海绵函数中提供安全性的内部状态部分
  • 承诺方案(Commitment Scheme):允许一方承诺一个值,并在之后才揭示该值的加密协议

H

  • 哈希函数(Hash Function):将任意长度输入映射为固定长度输出的函数
  • HMAC(Hash-based Message Authentication Code):基于哈希函数的消息认证码
  • HKDF(HMAC-based Key Derivation Function):基于HMAC的密钥派生函数

K

  • Keccak:SHA-3标准的基础算法,采用海绵结构
  • KDF(Key Derivation Function):密钥派生函数,从主密钥生成多个子密钥

L

  • 长度扩展攻击(Length Extension Attack):针对Merkle–Damgård结构哈希函数的攻击

M

  • Merkle–Damgård结构:许多传统哈希函数(如MD5、SHA-1、SHA-2)的基础结构
  • 消息摘要(Message Digest):哈希函数的输出,也称为哈希值

N

  • Nonce:一次性使用的随机数,通常用于加密协议

P

  • PBKDF2(Password-Based Key Derivation Function 2):一种从密码派生密钥的函数
  • 后量子密码学(Post-Quantum Cryptography):能够抵抗量子计算机攻击的密码算法

S

  • 盐值(Salt):随机数据,添加到密码哈希过程中以防止字典攻击
  • SHA(Secure Hash Algorithm):由美国国家标准与技术研究院(NIST)标准化的一系列哈希函数
  • SHAKE:SHA-3标准中的可扩展输出函数
  • SM3:中国国家密码管理局发布的密码哈希标准
  • 海绵函数(Sponge Function):一种密码学结构,用于构建SHA-3

X

  • XOF(Extendable-Output Function):可产生任意长度输出的函数,如SHAKE128和SHAKE256

Z

  • 零知识证明(Zero-Knowledge Proof):一方可以证明自己知道某个值,而不泄露任何关于该值的信息

相关文章:

哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础

文章目录 一、密码哈希函数概述1.1 哈希函数的基本概念1.2 哈希函数在数据安全中的应用 二、SHA-2系列算法详解2.1 SHA-2的起源与发展2.2 SHA-256技术细节与实现2.3 SHA-384和SHA-512的特点2.4 SHA-2系列算法的安全性评估 三、SHA-3系列算法详解3.1 SHA-3的起源与设计理念3.2 K…...

CUDA输出“hello world”

在我们学习任何一门编程语言的时候, 无疑当我们真正用其输出“hello world”的时候, 我们已经成功入门, 接下来要做的就是从入门到放弃了😆 接下来我们通过对比C和CUDA来学习CUDA的运行逻辑: C中的hello worldCUDA中的hello world文本编辑器编写源代码, 比如vscod…...

计算机视觉与深度学习 | 视觉里程计算法综述(传统+深度)

视觉里程计算法综述 1. 算法分类与原理1.1 传统几何方法1.2 深度学习方法2. 关键公式与模型2.1 本征矩阵分解2.2 深度学习模型架构3. 代码实现与开源项目3.1 传统方法实现3.2 深度学习方法实现4. 挑战与未来方向总结传统视觉里程计算法综述1. 算法分类与核心原理1.1 特征点法1.…...

c++ 函数参数传递

C 中的值传递和地址传递 在 C 中,函数参数传递主要有两种方式:值传递和地址传递(指针传递和引用传递都属于地址传递的变体)。 1. 值传递 特点 函数接收的是实参的副本对形参的修改不会影响原始变量适用于小型数据(…...

计算机视觉与深度学习 | 什么是图像金字塔?

图像金字塔详解 图像金字塔 图像金字塔详解1. **定义**2. **原理与公式****2.1 高斯金字塔****2.2 拉普拉斯金字塔**3. **代码示例****3.1 使用OpenCV实现****3.2 手动实现高斯模糊与降采样**4. **应用场景**5. **关键点总结**1. 定义 图像金字塔是一种多尺度图像表示方法,将…...

AI超级智能体教程(五)---自定义advisor扩展+结构化json输出

文章目录 1.自定义拦截器1.2自定义Advisor1.2打断点调试过程1.3Re-reading Advisor自定义实现 2.恋爱报告开发--json结构化输出2.1原理介绍2.1代码实现2.3编写测试用例2.4结构化输出效果 1.自定义拦截器 1.2自定义Advisor spring里面的这个默认的是SimpleloggerAdvisor&#…...

ActiveMQ 集群搭建与高可用方案设计(一)

一、引言 在当今分布式系统盛行的时代,消息中间件扮演着至关重要的角色,而 ActiveMQ 作为一款开源的、功能强大的消息中间件,在众多项目中得到了广泛应用。它支持多种消息传输协议,如 JMS、AMQP、MQTT 等 ,能够方便地实…...

MySQL数据操作全攻略:DML增删改与DQL高级查询实战指南

知识点4【MySQL的DDL】 DDL:主要管理数据库、表、列等操作。 库→表(二维)→列(一维) 数据表的第一行是 列名称 数据库是由一张或多张表组成 我们先学习在数据库中创建数据表 0、常见的数据类型: 1、…...

RabbitMQ 中的六大工作模式介绍与使用

文章目录 简单队列(Simple Queue)模式配置类定义消费者定义发送消息测试消费 工作队列(Work Queues)模式配置类定义消费者定义发送消息测试消费负载均衡调优 发布/订阅(Publish/Subscribe)模式配置类定义消…...

一种基于重建前检测的实孔径雷达实时角超分辨方法——论文阅读

一种基于重建前检测的实孔径雷达实时角超分辨方法 1. 专利的研究目标与实际问题意义2. 专利提出的新方法、模型与公式2.1 重建前检测(DBR)与数据裁剪2.1.1 回波模型与检测准则2.1.2 数据裁剪效果2.2 数据自适应迭代更新2.2.1 代价函数与迭代公式2.2.2 矩阵递归更新2.3 正则化…...

代购平台如何“说本地话,穿本地衣”

当海外消费者点开一个代购商城,看到满屏机械翻译的中式文案,他们大概率会默默关闭页面。还有数据显示,不符合本地审美的页面设计会导致70%的潜在客户流失,而专业的本地化改造能让订单转化率提升3倍以上。 01 AI翻译:让…...

C++调试(叁):编译qBreakpad并使用其生成Dump文件

目录 1.前言 2.生成Dump文件的第三方库 3.第三方库下载链接 4.编译qBreakpad 5.VS中使用qBreakpad 6.qBreakpad测试程序 前言 在第二篇文章中,我主要讲解了如何使用SetUnhandledExceptionFilter函数设置程序的异常回调,在设置的回调函数中调用MiniDumpWr…...

0基础 | STM32 | TB6612电机驱动使用

TB6612介绍及使用 单片机通过驱动板连接至电机 原因:单品机I/O口输出电流I小 驱动板:从外部引入高电压,控制电机驱动 电源部分 VM:电机驱动电源输入,输入电压范围建议为3.7~12V GND:逻辑电…...

Cycleresearcher:通过自动化评审改进自动化研究

1、引言 迄今为止,整个科学发现过程自动化的挑战在很大程度上仍未解决,特别是在生成和改进符合同行评审工作高标准的研究成果方面。此外,很少有工作涉及迭代反馈的整合,这对保持学术的健全性和新奇至关重要。当前的模型往往难以适…...

深入理解Redis SDS:高性能字符串的终极设计指南

📍 文章提示 10分钟掌握Redis核心字符串设计 | 从底层结构到源码实现,揭秘SDS如何解决C字符串七大缺陷,通过20手绘图示与可运行的C代码案例,助你彻底理解二进制安全、自动扩容等核心机制,文末附实战优化技巧&#xff…...

【tcp连接windows redis】

tcp连接windows redis 修改redis.conf 修改redis.conf bind * -::*表示禁用保护模式,允许外部网络连接 protected-mode no...

【AI平台】n8n入门6:调用MCP服务(非社区节点)

前言 前边用n8n搭建一个MCP服务,现在,用n8n调用其他服务商提供的MCP服务。本文以高德地图服务为例,记录一下操作过程。 实现案例功能 MCP是啥 MCP(Model Context Protocol,模型上下文协议)是由Anthropi…...

C++负载均衡远程调用学习之 Dns-Route关系构建

目录 1.LARS-DNS-MYSQL环境搭建 2.LARSDNS-系统整体模块的简单说明 3.Lars-Dns-功能说明 4.Lars-Dns-数据表的创建 5.Lars-Dns-整体功能说明 6.Lars-DnsV0.1-Route类的单例实现 7.Lars-DnsV0.1-Route类的链接数据库方法实现 8.Lars-DnsV0.1-定义存放RouteData关系的map数…...

Linux53 百度网盘运行(下载devtoolset11后仍提示stdc++3.0.29缺失 计划用docker容器隔离运行,计划后续再看)

算了 放弃 都用到docker了 计划先看看系统服务后续再研究吧 百度网盘运行(下载devtoolset11后仍提示stdc3.0.29缺失 计划用docker容器隔离运行 但是由于系统服务未扎实,计划后续再看 重新下了el7的版本 刚才已启动成功 单输入xlock不启动 切换用户也不启动 …...

ASP.NET MVC​ 入门与提高指南八

45. 神经形态计算与 MVC 应用性能革新 45.1 神经形态计算概念 神经形态计算是借鉴生物神经系统的结构和工作原理来设计计算系统。它模仿人脑神经元和突触的工作方式,具备低功耗、高并行性和自适应学习等特性,能在处理复杂感知和认知任务时展现出卓越的…...

Python刷题:流程控制(下)

今天刷的是PythonTip的Python 入门挑战中的题,整体难度不高,适合小白练手以及巩固知识点。下面会进行详细讲解。 每日一句 在无人问津的角落里, 默默努力的人独自发光, 孤独是他们奋斗路上的常客, 却也是成就他们的…...

【Bootstrap V4系列】学习入门教程之 组件-徽章(Badge)和面包屑导航(Breadcrumb)

Bootstrap V4系列 学习入门教程之 组件-徽章(Badge)和面包屑导航(Breadcrumb) 徽章(Badge)一、示例二、根据情境改变外观三、胶囊式徽章(Pill badges)四、链接 面包屑导航&#xff0…...

结合强化学习RL和SFT各自训练优势,让模型边学边练,从而平衡Zero-RL训练中的模仿和探索!!

摘要:最近在大型推理模型(LRMs)方面的进展表明,通过简单的基于规则的奖励进行强化学习(RL),可以涌现出复杂的行为,例如多步推理和自我反思。然而,现有的零强化学习&#…...

ai之paddleOCR 识别PDF python312和paddle版本冲突 GLIBCXX_3.4.30

这里写自定义目录标题 问题一**解决方案****方法 1:使用符号链接将系统库链接到 Conda 环境** **补充说明****验证修复结果** 问题二:**问题根源****解决方案****1. 确认 TensorRT 安装状态****2. 安装 TensorRT 并配置环境变量****3. 验证 TensorRT 与 …...

C++ 单例模式详解

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。 概念解析 单例模式的核心思想是: 限制类的实例化次数,确保在整个应用程序中只有一个实例存在 提供对该实例的全局访问点 控制共享…...

生成器模式(Builder Pattern)

好问题!生成器模式(Builder Pattern)在现实生活和程序开发中非常常见,它适合创建**“一步一步搭建起来的复杂对象”**。 🧠 一句话定义 生成器模式(Builder Pattern)是一种将复杂对象的构建过程…...

计算机网络八股文--day4 --传输层TCP与UDP

这是面试中最常考到的一层:端到端(也就是进程之间)的透明数据传输服务,差错控制和流量控制 该层呈上启下,像上面的资源子网提高服务,并使用下面通信子网的服务 端口,用于唯一标识主机上进程的&…...

大型语言模型个性化助手实现

大型语言模型个性化助手实现 目录 大型语言模型个性化助手实现PERSONAMEM,以及用户资料和对话模拟管道7种原位用户查询类型关于大语言模型个性化能力评估的研究大型语言模型(LLMs)已经成为用户在各种任务中的个性化助手,从提供写作支持到提供量身定制的建议或咨询。随着时间…...

步进电机中断函数解释

STM32 motor111.c 中 HAL_TIM_PeriodElapsedCallback 函数逐行解释 下面我们对 STM32 项目中 motor111.c 文件里的 HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 函数进行逐行解析,帮助初学者理解每一行代码的作用。此函数是在定时器产生更新中断时被调…...

多把锁以及线程死锁问题

在 Java 中,每一个对象都可以作为一把锁,synchronized 通过获取对象头中的锁标志位来实现同步。当一个线程获取到对象的锁后,其他线程就无法再获取该锁,只能等待获取到锁的线程释放锁之后才能继续执行被 synchronized 修饰的代码块…...

Vue 3 Element Plus 浏览器使用例子

Element Plus 是一个基于 Vue 3 的流行开源 UI 库,提供了一系列的组件,帮助开发者快速构建现代化的用户界面。它的设计简洁、现代,包含了许多可定制的组件,如按钮、表格、表单、对话框等,适合用于开发各种 Web 应用。 …...

NoxLucky:个性化动态桌面,打造独一无二的手机体验

在数字时代,手机桌面的个性化设置已经成为许多人表达自我和展示个性的重要方式。今天,我们要介绍的 NoxLucky,就是这样一款功能强大的动态桌面手机应用。它不仅提供了独家的动态壁纸素材库,还支持将抖音、INS等平台的短视频直接设…...

如何在WORD WPS中输入英语音标 批量给英语标注音标

在我国,英语的学习,已经是贯穿小学到大学的课程,英语学习,关键是听说读写,而听说读,都离不开一个字--音,这就涉及到了英语的音标了。音标(Phonetics)是表示单词发音的一种…...

RUST变量学习笔记

1,作用域概念 捕获环境 2,所有权概念 Rust则是通过所有权和借用来保证内存安全。很多人不理解为啥说Rust是内存安全的,其实就是在默认情况下,你是写不出内存不安全的代码的。 Rust的所有权并不难理解,它有且只有如下…...

n8n工作流自动化平台的实操:本地化高级部署

一、本地高级部署 1.下载 docker pull docker.n8n.io/n8nio/n8n 2.运行 docker volume create n8n_data docker run -dit --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n -e N8N_SECURE_COOKIEfalse -e N8N_RUNNERS_ENABLEDtrue -e N8N_ENFORCE_SETTINGS_FIL…...

【Ansible自动化运维实战:从Playbook到负载均衡指南】

本文是「VagrantVirtualBox虚拟化环境搭建」的续篇,深入探索Ansible在自动化运维中的核心应用: ✅ Ansible核心技能:Playbook编写、角色(Roles)模块化、标签(Tags)精准控制 ✅ 实战场景覆盖&a…...

数据赋能(210)——质量管理——可靠性原则

概述 数据可靠性原则确保数据的准确性、完整性、一致性和可信性,是决策和业务活动对数据质量的基本要求。在信息化和数字化快速发展的今天,数据已成为企业的重要资产,数据可靠性直接影响到企业的决策质量和业务活动效果。数据可靠性是数据质…...

二、机器学习中Python变量基础

二、Python变量基础 像C语言和Matlab一样,变量名由字母、数字、下划线组成(但不能以数字开头,字母区分大小写)变量名不能与内置的函数同名。 根据变量是否可以充当容器,将变量类型分为基本类型和高级类型。 基本变量…...

有机玻璃材质数据采集活性炭吸附气体中二氧化硫实验装置

JGQ112Ⅱ有机玻璃材质数据采集活性炭吸附气体中二氧化硫实验装置 一.实验目的 1.熟悉活性炭吸附剂的特性和在SO2气体净化方面的应用。 2.掌握活性炭吸附法的流程和实验过程中各参数的控制方法。 3.了解主要参数变化对吸附效率的影响。 4.掌握吸附等温线概念和测定方法。 二.技术…...

Javase 基础入门 —— 07 接口

本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 概述 接…...

LangChain:重构大语言模型应用开发的范式革命

2022年10月22日,Harrison Chase在GitHub上提交了名为LangChain的开源项目的第一个代码版本。这个看似普通的代码提交,却悄然开启了一场重塑大语言模型(LLM)应用开发范式的技术革命。彼时,距离ChatGPT引爆全球人工智能浪…...

【现代深度学习技术】现代循环神经网络04:双向循环神经网络

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

重塑数学边界:人工智能如何引领数学研究的新纪元

目录 一、人工智能如何重新定义数学研究的边界 (一)数学与AI的关系:从基础理论到创新思维的回馈 (二)AI的创造力:突破传统推理的局限 (三)AI对数学研究的潜在贡献:创…...

链表的回文结构题解

首先阅读题目: 1.要保证是回文结构 2.他的时间复杂度为O(n)、空间复杂度为O(1) 给出思路: 1.首先利用一个函数找到中间节点 2.利用一个函数逆置中间节点往后的所有节点 3.现在有两个链表,第一个链表取头节点一直到中间节点、第二个链表取头结点到尾…...

xLua笔记

Generate Code干了什么 肉眼可见的,在Asset文件夹生成了XLua/Gen文件夹,里面有一些脚本。然后对加了[CSharpCallLua]的变量寻找引用,发现它被XLua/Gen/DelegatesGensBridge引用了。也可以在这里查哪些类型加了[CSharpCallLua]。 public over…...

【Hive入门】Hive与Spark SQL深度集成:通过Spark ThriftServer高效查询Hive表

目录 引言 1 Spark ThriftServer架构解析 1.1 核心组件与工作原理 1.2 与传统HiveServer2的对比 2 Spark ThriftServer部署指南 2.1 环境准备与启动流程 2.1.1 前置条件检查 2.1.2 服务启动流程 2.2 高可用部署方案 2.2.1 基于ZooKeeper的HA架构 3 性能优化实战 3.…...

快速掌握--cursor

Cursor - The AI Code Editor 官网下载安装 详细教程:cursor 下载安装使用(保姆教程)_cursor下载-CSDN博客 不知道为啥,第一次给我用的是繁体回答 然后改了一下询问方式 codebase就是告诉ai可以从整个项目中找答案&#xff0…...

Linux之基础开发工具(yum,vim,gcc,g++)

目录 一、软件包管理器 1.1、什么是软件包 1.2、yum具体操作 1.2.1、查看软件包 1.2.2、安装软件 1.2.3、卸载软件 1.2.4、安装源 二、编辑器vim 2.1、vim的基本概念 2.2、vim的基本操作 2.3、vim正常模式命令集 2.4、vim末行模式命令集 2.5、替换模式 2.6、视图…...

【计算机视觉】三维重建: OpenMVS:工业级多视图立体视觉重建框架

深度解析OpenMVS:工业级多视图立体视觉重建框架 技术架构与核心算法1. 系统架构设计2. 核心算法解析稠密点云重建表面重建网格优化 实战全流程指南环境配置硬件要求编译安装(Ubuntu) 数据处理流程输入准备(OpenMVG输出&#xff09…...

C++负载均衡远程调用学习之异步消息任务功能与连接属性

目录 1.LarV0.11-异步消息机制的event_loop增添属性分析 2.LARS 3.LarV0.11异步消息发送机制的实现及测试 4.LarV0.11异步消息任务机制bug修复和效果演示 5.LarV0.12链接参数属性的绑定 1.LarV0.11-异步消息机制的event_loop增添属性分析 ## 4) 事件触发event_loop ​ …...