哈希是一种单向摘要密码学哈希函数把任意大小的数据映射成固定长度输出。SHA-256 输出 256 位,通常显示为 64 个十六进制字符。它设计上难以从摘要还原原文,也难以找到两个不同输入拥有相同摘要。
完整性检查比较已知值软件下载常发布 SHA-256 校验和。下载后对本地文件求哈希并比较,匹配说明文件大概率与发布者计算摘要时相同。这证明一致性,不证明发布者可信;如果文件和校验和来自同一被篡改页面,仍可能被误导。
哈希是确定性的相同输入总是产生相同 SHA-256 摘要。这有利于查重和校验,也意味着低熵输入可能被猜出。常见词、短码或可预测 ID 的哈希可以通过枚举猜测匹配。哈希让内容不直观,但不会让弱输入变强。
密码存储需要慢哈希和盐SHA-256 很快,这对完整性检查有利,对密码存储不利。攻击者可以高速尝试猜测。密码系统需要盐值和专门的密码哈希算法,如 bcrypt、scrypt 或 Argon2,并根据平台建议设置成本。
哈希不是加密加密可以用密钥还原,哈希不是为了还原。如果需要取回原数据,哈希就是错误工具;如果要证明数据未变,哈希可能合适;如果要证明来源,还需要签名或消息认证码。
规范化输入很重要看似相同的输入可能因为空格、换行、Unicode 规范化、JSON key 顺序、文件元数据和编码不同而哈希不同。文本框可能规范化换行,文件哈希则按原始字节计算。结构化数据要跨系统一致,必须定义规范表示。
实用哈希流程文件校验时直接对文件字节求哈希,并从可信渠道比较校验和。文本比较要先决定编码和换行。API 签名必须严格遵守服务方规范化规则。密码不要使用裸 SHA-256。可预测敏感值的哈希也要谨慎对待。