一文读懂 SHA-1:原理、图解、代码实现
什么是哈希函数哈希函数Hash Function是一种单向函数能把任意长度的输入数据转换为固定长度的输出摘要。无论输入是 1 个字节还是 1TB输出始终是固定长度的指纹。图 1SHA-1 哈希过程 — 任意长度输入 → 160 位固定输出三大核心特性图 2雪崩效应演示 — abc vs abd 仅 1 位差异输出 48.8% 的位翻转 一句话理解哈希函数就像数据世界的指纹机——不管多大的数据都能生成一个固定长度的唯一标识且过程不可逆。SHA 家族全景对比SHASecure Hash Algorithm安全哈希算法并非单一算法而是一个不断演进的算法家族。从 1993 年的 SHA-0 到 2015 年标准化的 SHA-3每一代都针对前一代的安全缺陷进行改进或采用全新的设计理念。理解整个 SHA 家族的谱系有助于我们在工程实践中做出正确的算法选型。SHA 家族成员总览目前 SHA 家族可以划分为三大阵营详细参数对比算法名称输出长度块大小轮数设计者发布年份安全状态SHA-0160 bit512 bit80NSA1993已破解从未正式使用SHA-1160 bit512 bit80NSA1995已破解2017 实际碰撞SHA-224224 bit512 bit64NSA2004安全推荐使用SHA-256256 bit512 bit64NSA2001安全广泛使用SHA-384384 bit1024 bit80NSA2001安全推荐使用SHA-512512 bit1024 bit80NSA2001高度安全SHA-3-256256 bit1088 bit24Guido Bertoni 等2015最高安全等级SHA-3-512512 bit576 bit24Guido Bertoni 等2015最高安全等级SHA-2 家族的核心区别SHA-2 家族包含 SHA-224、SHA-256、SHA-384、SHA-512 四个变体它们在内部结构上有本质区别两者的核心差异在于字长和块大小。SHA-512 使用 8 个 64 位工作变量A-H而 SHA-256 使用 8 个 32 位工作变量。在 64 位 CPU 上SHA-512 的吞吐量可以比 SHA-256 高出约 50%因为每次运算处理的数据量翻倍。// SHA-256 初始值32位 H0 0x6a09e667 H1 0xbb67ae85 H2 0x3c6ef372 H3 0xa54ff53a H4 0x510e527f H5 0x9b05688c H6 0x1f83d9ab H7 0x5be0cd19 // SHA-512 初始值64位 H0 0x6a09e667f3bcc908 H1 0xbb67ae8584caa73b H2 0x3c6ef372fe94f82b H3 0xa54ff53a5f1d36f1SHA-3Keccak完全不同的设计SHA-3 在 2012 年的 NIST 竞赛中胜出由 Guido Bertoni、Joan Daemen、Michael Peeters 和 Gilles Van Assche 设计。它与 SHA-2 的根本区别在于内部结构海绵结构的核心思想是有一个固定大小的“状态”Keccak 中为 1600 位通过“吸收”absorbing阶段将消息块逐个混入状态再通过“挤出”squeezing阶段从状态中提取哈希输出。这种设计天然抵抗长度扩展攻击因为攻击者无法从最终哈希值推导出内部状态。 为何需要 SHA-3既然 SHA-256 目前仍然安全为何还要 SHA-3答案是架构多样性。如果未来发现 SHA-2 家族的系统性漏洞就像 SHA-1 那样SHA-3 作为完全不同设计的备选方案可以确保数字基础设施的安全连续性。NIST 的策略是“不把所有鸡蛋放在一个篮子里”。SHA 家族树形关系图图 3SHA 算法家族演进 — 从 SHA-0 到 SHA-3 的三代发展SHA-1 发展历程SHA-1 是由美国国家安全局NSA设计、NIST 发布的密码学哈希函数。下面是它从诞生到淘汰的关键时间线图 4SHA-1 从诞生到禁用的关键里程碑年份事件影响1993SHA-0 发布初代版本很快发现设计缺陷未投入实际应用1995SHA-1 诞生修复 SHA-0 漏洞迅速成为 SSL/TLS、Git 等领域标准2005王小云团队攻破理论上可在 2^69 次操作内找到碰撞远低于 2^80 安全阈值2017SHAttered 攻击Google 实际生成两份不同但 SHA-1 相同的 PDF加速淘汰2020全面禁用NIST 强制停用主流浏览器、PCI DSS 标准要求迁移到 SHA-256/SHA-3⚠️ 安全警告SHA-1 已于 2020 年被 NIST 正式禁用。请勿在新项目中使用 SHA-1 处理安全敏感数据推荐迁移到 SHA-256 或 SHA-3。核心原理图解整体架构Merkle-Damgård 结构SHA-1 采用经典的Merkle-Damgård 结构将消息分块迭代压缩。整个过程分为三大模块数据填充处理为了使输入数据符合 512 位分块要求SHA-1 会对数据进行标准化的填充操作图 5SHA-1 数据填充流程 — 将任意长度消息补齐到 512 位的整数倍图 6数据填充动画 — 以 abc 为例演示 4 步填充过程填充三步骤 示例输入 abc原始 3 字节24 位→ 添加 0x80 → 填充 423 个 0 → 附加长度 0x0000000000000018 → 最终形成一个完整的 512 位分组。初始化哈希缓冲区SHA-1 使用5 个 32 位寄存器H0-H4存储中间状态初始值取自自然常数的平方根小数部分H0 0x67452301 H1 0xEFCDAB89 H2 0x98BADCFE H3 0x10325476 H4 0xC3D2E1F0这些魔数并非随意选择而是通过√2、√3、√5等数学常数的二进制小数推导而来确保算法具有良好的随机性分布。压缩函数 — 算法的核心压缩函数是 SHA-1 的心脏每个 512 位分组经过 80 轮运算产生中间结果。图 780 轮压缩运算动画 — 5 寄存器循环移位 逻辑函数切换图 8SHA-1 压缩函数结构 — 5 个寄存器、80 轮运算、4 组逻辑函数消息扩展将 512 位分组扩展为 80 个 32 位字W[0] 到 W[79]前 16 个直接取自输入后续通过公式推导W[t] ROTL( W[t-3] XOR W[t-8] XOR W[t-14] XOR W[t-16], 1 )四轮逻辑函数轮次步数逻辑函数 f(B,C,D)常量 K名称Round 10-19(B AND C) OR (NOT B AND D)0x5A827999Ch选择函数Round 220-39B XOR C XOR D0x6ED9EBA1Parity奇偶函数Round 340-59(B AND C) OR (B AND D) OR (C AND D)0x8F1BBCDCMaj多数函数Round 460-79B XOR C XOR D0xCA62C1D6Parity奇偶函数算法执行流程完整理解 SHA-1需要跟踪从输入到输出的每一步操作。以下是完整的数据流图图 9SHA-1 完整执行流程 — 从输入到输出的六大步骤以 abc 为例的完整计算让我们跟踪输入abc的每一步处理填充后数据61626380 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000001880 轮迭代初始化工作变量a0x67452301, b0xEFCDAB89, c0x98BADCFE, d0x10325476, e0xC3D2E1F0经过 80 轮位运算后更新哈希值。最终结果 abc 的 SHA-1 摘要A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D可通过在线工具如SHA-1 Calculator验证此结果。性能与对比分析计算效率SHA-1 采用纯 CPU 位运算实现无复杂数学计算如模运算或大数运算执行效率极高哈希算法性能对比图 10主流哈希算法处理速度对比全方位对比算法摘要长度速度 (MB/s)安全性典型用途MD5128 bit800-1200已破解文件校验非安全场景SHA-1160 bit500-800理论可破旧版数字证书、GitSHA-256256 bit300-500目前安全区块链、数字签名SHA-512512 bit600-900高度安全SSL/TLS 证书SHA-3可变200-400最高安全后量子时代推荐内存占用分析SHA-1 工作内存占用分布安全性与替代方案优缺点全景对比安全强度演变图 12SHA-1 安全强度随时间的衰减趋势 迁移建议NIST 推荐替代方案SHA-256当前主流、SHA-3后量子安全。迁移路径MD5 → SHA-1 → SHA-256 → SHA-3。大部分现代框架已默认使用 SHA-256。碰撞攻击详解碰撞攻击是哈希函数面临的最核心威胁。理解碰撞攻击的原理才能真正明白为什么 SHA-1 被淘汰以及为什么迁移到 SHA-256 是必要的。什么是碰撞攻击碰撞攻击Collision Attack的目标是找到两个不同的输入使它们产生完全相同的哈希输出。数学定义为寻找 M1 ≠ M2使得 Hash(M1) Hash(M2)这听起来似乎很容易但实际上对于理想的 n 位哈希函数找到碰撞的预期尝试次数约为。这就是著名的生日攻击Birthday Attack理论。生日攻击原理生日攻击的名字来源于“生日悖论”在一个房间里需要多少人才能使其中两人生日相同的概率超过 50%答案不是 365/2 ≈ 183 人而仅仅需要23 人。这个反直觉的结论源于组合数学——两两配对的数量增长远快于线性增长。对于哈希函数同样的原理适用。如果哈希输出有 n 位即 2^n 种可能找到碰撞需要的尝试次数约为碰撞复杂度 ≈ 2^(n/2) 生日界限对于 SHA-1160 位理论上找到碰撞需要约 2^80 次运算。这曾是 SHA-1 的安全基础。王小云团队的差分攻击20052005 年山东大学的王小云教授团队发表了一篇震动密码学界的论文提出了针对完整 SHA-1 的差分碰撞攻击方法。这一突破性的成果将 SHA-1 的碰撞复杂度从 2^80 降到了约 2^69 次运算。差分攻击的核心思想差分密码分析Differential Cryptanalysis通过研究输入差分与输出差分之间的关系来攻击密码算法。对于 SHA-1王小云团队的成果不仅影响了 SHA-1他们此前还破解了 MD5 和 SHA-0。这些工作直接推动了整个行业加速向 SHA-2 迁移。SHAttered 攻击——首次实际碰撞20172017 年 2 月Google 与荷兰 CWI 研究所联合宣布SHAtteredSHA-1 is shattered攻击首次在现实中生成了两份内容不同但 SHA-1 哈希值完全相同的 PDF 文件。这是一个里程碑事件——从理论威胁变成了现实威胁。攻击规模与资源资源类型消耗量说明CPU 计算力6,500 CPU 年相当于一台单核 CPU 连续运行 6,500 年GPU 计算力110 GPU 年使用 Amazon 云服务的 GPU 集群总成本约 11 万美元按云计算当时价格估算碰撞搜索时间约 1 年2016 年开始2017 年 2 月公布两个碰撞 PDF 的构造Google 构造了两个 PDF 文件一份内容是“flame”形状的简历另一份是“shattered-1.pdf”形状完全不同。两份文件大小约为 320KBSHA-1 哈希值都是SHA-1: 38762cf7f55934b34d179ae6a4c80cadccbb7f0a尽管文件内容截然不同渲染后的 PDF 外观也完全不一样但它们的 SHA-1 值完全一致。Google 将这两个文件公开在 shattered.io 网站上任何人都可以下载验证。碰撞复杂度的数学意义从 2^80 到 2^63.1看似只是指数从 80 变为 63.1但实际计算量相差约20 万倍2^80 / 2^63.1 2^16.9 ≈ 208,000 倍⚠ 关键警示2^63.1 次运算在 2017 年需要约 11 万美元的云计算资源。而到 2026 年随着 GPU 算力的指数增长和成本的持续下降同样的攻击可能只需几千美元。这意味着 SHA-1 碰撞攻击已经从国家级攻击者的能力范围降到了普通黑客的水平。对比之下SHA-256 的碰撞复杂度为 2^128即使考虑未来的计算能力提升在未来数十年内仍然安全。碰撞攻击原理图图 13碰撞攻击原理 — 两个不同输入经过相同哈希函数产生相同输出完整实现代码以下是严格遵循 SHA-1 标准FIPS 180-1的纯 C# 实现零第三方依赖支持字符串和字节数组输入using System; using System.Text; /// summary /// SHA-1 算法纯 C# 原生实现符合 FIPS 180-1 标准 /// /summary public static class Sha1Managed { // 初始哈希缓冲区5 个 32 位寄存器 private static readonly uint[] H_INIT { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0 }; // 4 轮循环常量 private static readonly uint[] K { 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 }; /// summary计算字符串的 SHA-1 摘要UTF8/summary public static string ComputeHash(string input) { if (input null) input string.Empty; return ComputeHash(Encoding.UTF8.GetBytes(input)); } /// summary计算字节数组的 SHA-1 摘要/summary public static string ComputeHash(byte[] input) { uint h0 H_INIT[0], h1 H_INIT[1], h2 H_INIT[2], h3 H_INIT[3], h4 H_INIT[4]; byte[] paddedData PadData(input); for (int i 0; i paddedData.Length; i 64) ProcessBlock(paddedData, i, ref h0, ref h1, ref h2, ref h3, ref h4); return ${h0:X8}{h1:X8}{h2:X8}{h3:X8}{h4:X8}; } private static byte[] PadData(byte[] input) { long bitLength (long)input.Length * 8; int padBytes (56 - (input.Length 1) % 64 64) % 64; int totalLen input.Length 1 padBytes 8; byte[] padded new byte[totalLen]; Buffer.BlockCopy(input, 0, padded, 0, input.Length); padded[input.Length] 0x80; byte[] lenBytes BitConverter.GetBytes(bitLength); if (BitConverter.IsLittleEndian) Array.Reverse(lenBytes); Buffer.BlockCopy(lenBytes, 0, padded, totalLen - 8, 8); return padded; } private static void ProcessBlock(byte[] block, int offset, ref uint h0, ref uint h1, ref uint h2, ref uint h3, ref uint h4) { uint[] w new uint[80]; for (int i 0; i 16; i) { int idx offset i * 4; w[i] ((uint)block[idx] 24) | ((uint)block[idx1] 16) | ((uint)block[idx2] 8) | block[idx3]; } for (int i 16; i 80; i) w[i] RotateLeft(w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16], 1); uint a h0, b h1, c h2, d h3, e h4; for (int i 0; i 80; i) { uint f, k; if (i 20) { f (b c) | (~b d); k K[0]; } else if (i 40) { f b ^ c ^ d; k K[1]; } else if (i 60) { f (b c) | (b d) | (c d); k K[2]; } else { f b ^ c ^ d; k K[3]; } uint temp RotateLeft(a, 5) f e k w[i]; e d; d c; c RotateLeft(b, 30); b a; a temp; } h0 a; h1 b; h2 c; h3 d; h4 e; } private static uint RotateLeft(uint value, int bits) (value bits) | (value (32 - bits)); }测试验证// 标准测试向量 Sha1Managed.ComputeHash(abc); // 输出: A9993E364706816ABA3E25717850C26C9CD0D89D ✓ Sha1Managed.ComputeHash(Hello World); // 输出: 0A4D55A8D778E5022FAB7014FBFD557852CB8F83 代码特点纯 C# 实现、无第三方依赖、FIPS 180-1 标准兼容、已通过标准测试向量验证。可直接嵌入嵌入式系统和工控环境。SHA-1 实际应用场景尽管 SHA-1 已被淘汰但它在过去二十年中曾被广泛应用于各种场景。了解这些应用场景有助于识别遗留系统中可能存在的 SHA-1 使用并为迁移做准备。密码存储——不要用 SHA-1⚠ 密码存储绝对不能使用 SHA-1SHA-1 是快速哈希专为计算效率设计。攻击者可以用 GPU 每秒计算数十亿次 SHA-1 运算轻松暴力破解密码。密码存储必须使用专门的慢哈希算法bcrypt、Argon2 或 scrypt。内容寻址存储内容寻址存储Content-Addressable Storage, CAS根据文件内容的哈希值来存储和检索数据。Git、IPFS、Docker 镜像层都使用这种模式。SHA-1 的 160 位长度在中小规模场景下足够使用但超大规模存储系统如备份数 PB 数据需要更强的哈希来避免偶然碰撞。# Git 中的内容寻址示例 # 文件内容决定哈希值而非文件名 echo hello world | git hash-object --stdin # 输出: 3b18e512dba79e4c8300dd08aeb37f8e728b8dad # 即使文件名不同内容相同则哈希相同 echo hello world | git hash-object --stdin # 输出仍然是: 3b18e512dba79e4c8300dd08aeb37f8e728b8dad Git 正在迁移到 SHA-256Git 2.29 已实验性支持 SHA-256 对象格式objectFormatsha256。虽然 Git 中的 SHA-1 碰撞风险因提交中包含时间戳等难以预测的数据而相对较低但社区已开始推动向 SHA-256 的长期迁移。从 SHA-1 迁移到 SHA-256将现有系统从 SHA-1 迁移到 SHA-256 是一项必要的工程任务。以下提供完整的迁移指南涵盖检查清单、代码示例和常见陷阱。迁移检查清单在开始迁移之前需要全面排查系统中所有使用 SHA-1 的位置C# 迁移代码示例// 迁移前 (SHA-1) using (var sha1 SHA1.Create()) { byte[] hash sha1.ComputeHash(data); return BitConverter.ToString(hash).Replace(-, ); } // 迁移后 (SHA-256) using (var sha256 SHA256.Create()) { byte[] hash sha256.ComputeHash(data); return BitConverter.ToString(hash).Replace(-, ); } // HMAC 迁移 // 迁移前 var hmac new HMACSHA1(key); // 迁移后 var hmac new HMACSHA256(key);Git 仓库迁移Git 从 2.29 版本开始实验性支持 SHA-256 对象格式。迁移 Git 仓库需要谨慎操作# 查看当前对象格式 git config --get core.repositoryFormatVersion # 创建使用 SHA-256 的新仓库实验性 git init --object-formatsha256 new-repo # 当前大多数 Git 服务GitHub/GitLab仍使用 SHA-1 # 建议等待 Git 生态全面支持 SHA-256 后再迁移 # Git 中的 SHA-1 风险因 commit 包含时间戳等数据而相对较低迁移注意事项和常见陷阱 渐进式迁移策略推荐采用双写验证的渐进迁移策略新数据同时计算 SHA-1 和 SHA-256验证两者一致性旧数据在读取时异步重算 SHA-256确认稳定后移除 SHA-1 代码路径。

相关新闻

网盘直链下载助手:告别限速,九大网盘文件高速下载终极指南

网盘直链下载助手:告别限速,九大网盘文件高速下载终极指南

网盘直链下载助手:告别限速,九大网盘文件高速下载终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国…

2026/7/24 22:12:54阅读更多 →
Java学习进程5

Java学习进程5

Java学习进程5 递归 递归: 1.方法调用自己本身 2.设置递归的退出条件(使用递归时一定要有出口) example 实现斐波拉契数列(到100的和)。 package com.yw.oop0606;/*** author YAN* date 2026/6/6 19:07* description*/ public class digui {/…

2026/7/24 22:12:54阅读更多 →
D3KeyHelper:暗黑3技能连点器的终极解决方案

D3KeyHelper:暗黑3技能连点器的终极解决方案

D3KeyHelper:暗黑3技能连点器的终极解决方案 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏神3中繁复的技能按键而手忙脚…

2026/7/24 22:12:54阅读更多 →
Hermes Agent Skills:让它把成功经验变成可复用工作流的正确姿势

Hermes Agent Skills:让它把成功经验变成可复用工作流的正确姿势

Hermes Agent Skills:让它把成功经验变成可复用工作流的正确姿势 [!NOTE] 很多初学者把智能体当成“更会聊天的模型”,结果一上手就把文件、网络和高权限命令交出去。本篇围绕 Skills系统 建立一套可复现的实践路径:先明确任务边界,再确认工具与权限,最后用日志和结果验证…

2026/7/24 23:33:10阅读更多 →
异环1.2版本国际服卡池流水分析:真红角色市场表现解读

异环1.2版本国际服卡池流水分析:真红角色市场表现解读

异环1.2版本国际服卡池流水深度分析:真红角色市场表现全解读近期《异环》1.2版本"异环&真红"卡池在国际服的表现引起了广泛关注,作为一款备受期待的二次元手游,其在不同地区的市场反响差异显著。本文将深入分析该卡池在…

2026/7/24 23:33:10阅读更多 →
AI写作工具横评:提升毕业论文效率的5大平台

AI写作工具横评:提升毕业论文效率的5大平台

1. 毕业论文写作痛点与AI工具崛起写毕业论文是每个大学生必经的煎熬过程。从选题开题到文献综述,从数据收集到论文撰写,动辄数月的写作周期让无数学生抓狂。我指导过上百名学生的毕业论文,发现他们普遍面临三大难题:文献阅读效率低…

2026/7/24 23:33:10阅读更多 →
UE5体素引擎实战:从原理到性能优化的完整开发指南

UE5体素引擎实战:从原理到性能优化的完整开发指南

1. 项目概述:为什么我们需要一个体素引擎?在虚幻引擎5(UE5)的世界里,我们习惯了用多边形(Polygon)来构建一切。从一块石头到一座城市,都是由无数个三角面片组成的。这很强大&#xf…

2026/7/24 23:33:10阅读更多 →
深度解析Detect-It-Easy:3大逆向工程策略与安全分析实战指南

深度解析Detect-It-Easy:3大逆向工程策略与安全分析实战指南

深度解析Detect-It-Easy:3大逆向工程策略与安全分析实战指南 【免费下载链接】Detect-It-Easy Program for determining types of files for Windows, Linux and MacOS. 项目地址: https://gitcode.com/gh_mirrors/de/Detect-It-Easy Detect-It-Easy&#xf…

2026/7/24 23:33:10阅读更多 →
FastAPI做项目的后端准备

FastAPI做项目的后端准备

FastAPI做项目的后端准备 文章目录FastAPI做项目的后端准备前言一、理解框架之间的关系?二、Main里面的配置定义 lifespan 生命周期函数1. 引入必要的库代码说明:2. 多环境配置依赖相关文件一览三个环境对照表配置实现步骤1. 创建配置文件2. 创建环境文件…

2026/7/24 23:31:09阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →