Skip to main content
Tool Factory

基于证据的资源

编码、哈希和加密:每种方法的作用

了解编码、哈希和加密的区别。根据所需结果选择 Base64、SHA-2、AES 或其他方法。

编码、哈希和加密都会转换数据,但不会产生相同结果。编码改变表示形式。哈希生成固定长度的哈希值。加密使用密钥保护可读内容。即使输出看起来不可读,错误的操作仍可能造成严重错误。

快速回答: 其他系统需要兼容表示形式时,请使用编码。需要可重复指纹或完整性检查时,请使用哈希。授权系统必须恢复机密数据时,请使用经过身份验证的加密。Base64 是编码,不是加密。

本指南比较用途、可逆性、密钥、算法、错误和示例。每项决定都连接到编码工具哈希工具加密工具

最重要的区别是什么?

最重要的区别是承诺的结果。编码承诺规范化表示。哈希承诺具有算法相关属性的确定性哈希。只有算法、模式、密钥、Nonce、身份验证和实现都合适时,加密才承诺机密性。

操作 主要用途 可逆 需要秘密密钥 常见输出 示例
编码 为传输或存储表示数据 使用其他语法的文本或字节 Base64、十六进制、百分号编码
哈希 生成用于完整性或比较的指纹 实际不可逆 固定长度哈希 SHA-256、SHA-384、SHA-512
加密 防止未经授权的读取 是,需要正确密钥 密文、Nonce 和 Tag AES-GCM、ChaCha20-Poly1305

外观不能决定操作。Base64 可能看起来随机,但任何人都可以解码。十六进制哈希可能像密文,但不会恢复原文。密文可以使用 Base64 编码进行传输。

什么是编码?

编码使用公开规则,将数据映射为另一种表示形式。它在系统之间创建兼容性。它不需要秘密。如果解码器知道模式,就可以还原有效输入。

Base64 是常见的二进制到文本编码。RFC 4648 规定 Base16、Base32 和 Base64,以及它们的字母表、填充和规范行为。Base64 让字节可以通过面向文本的系统传输。它不会隐藏这些字节。

Base64 编码器会分组比特,并将它们映射到有限字母表。填充会补齐最后一组。不同变体可能使用其他字母表。URL 安全的 Base64 会替换有问题的字符。接收方必须知道变体和填充规则。

十六进制编码使用两个十六进制字符表示每个字节。它易于检查和复制。在再次封装前,它会使字符数量翻倍。Base64 通常需要较少文本,但相对于二进制数据同样会增加大小。

百分号编码在 URL 组件中表示八位字节。HTML 实体在标记中表示特殊字符。UTF-8 等字符编码将字符映射到字节。每种操作解决兼容性问题,但不提供机密性。

你可以使用 Base64 编码器和解码器测试受控输入。未检查处理模型前,不要输入密码、密钥或受监管数据。浏览器处理可以降低部分传输风险,但不能替代设备安全。

Base64 是加密吗?

不是。Base64 使用公开且可逆的映射,不使用秘密密钥。拥有文本的任何人都可以解码。Base64 可以封装密文,但单独不提供机密性。

配置、Cookie、令牌和协议需要特别注意这种区别。编码后的秘密仍然是必须保护的秘密。将 Base64 当作屏障可能泄露凭据和个人数据。

什么是哈希?

密码学哈希函数接受可变长度输入,并返回固定长度哈希。相同输入产生相同哈希。一个小变化应显著改变结果。安全性还需要抵抗原像、第二原像和有意碰撞攻击。

NIST FIPS 180-4 规定 Secure Hash Standard。它包含 SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224 和 SHA-512/256。“SHA-2”表示一个系列,而不是单个长度。

直接回答: 需要可重复值但不需要恢复输入时,请使用哈希。授权方必须恢复输入时,请使用加密。

文件发布者通常会在下载旁发布哈希。请对下载的字节计算哈希并比较。匹配结果证明这些字节与生成已发布值的字节相同。它不能证明是谁发布了该值。你需要经过身份验证的渠道或签名来证明来源。

SHA-2 哈希计算器可以计算常见结果。All Hashes Generator(英文页面)可以显示多个算法。多个输出不会让弱算法变强。请根据要求和适用标准选择算法。

哈希不是唯一标识符

固定长度哈希表示无限数量的输入。因此,碰撞必然存在。安全哈希会让有用碰撞变得困难,但不会让碰撞不可能。

不要将哈希作为通用身份凭证。请评估算法、输入构造、攻击者和后果。旧哈希可以检测意外损坏,但可能抵抗不了攻击者。

Hash Analyzer(英文页面)可以根据长度和语法建议算法。它不能证明哪个算法生成了该值。仍然需要上下文。

密码哈希需要特定设计

通用哈希有意设计得很快。这有利于文件检查,但也让攻击者可以在单位时间内尝试许多密码。

密码存储需要专门设计的函数或密钥派生。它必须使用唯一 Salt 和有意选择的成本。它还需要受控参数、安全比较、迁移和副本保护。NIST SP 800-63B提供最新指导。

Salt 不需要保密。它可以防止相同密码在多个账户中生成相同验证值。Pepper 是具有不同运行要求的另一种秘密。Salt 和 Pepper 都不会将 Base64 变成加密,也不会让无 Salt 的快速哈希变得合适。

校验和不一定是密码学哈希

校验和可以检测意外更改。CRC 算法适合传输和存储错误。它们通常不能抵抗有意篡改。密码学哈希面向更强的属性。

请在选择前定义要求。意外错误请使用校验和。攻击者可能修改数据时,请使用密码学哈希或 MAC。接收方必须使用公钥检查来源和完整性时,请使用数字签名。

什么是加密?

加密使用密钥将明文转换为密文。解密会恢复原文。安全系统还需要正确的密钥生成、模式、Nonce、身份验证、存储、轮换和访问控制。

NIST FIPS 197 规定 AES。AES 使用 128 位块,并支持 128、192 或 256 位密钥。AES 本身不会规定如何加密长消息。操作模式提供这种构造。

经过身份验证的模式可以保护机密性并检测更改。AES-GCM 是常见示例。它的 Tag 可以拒绝被更改的密文或相关数据。未经身份验证的加密可能泄露信息,或接受攻击者控制的更改。

NIST SP 800-38D 规定 GCM 和 GMAC。其中的 Nonce 要求非常重要。对同一 GCM 密钥重复使用 Nonce 可能破坏安全性。如果系统不管理状态,接口无法阻止不同会话重复使用 Nonce。

你可以使用 AES Encryption(英文页面)学习并执行受控转换。浏览器工具不是完整的密钥管理系统。生产加密需要经过验证的协议和受保护的生命周期。

对称加密和非对称加密

对称加密使用共享秘密密钥。同一密钥或相关密钥负责加密和解密。AES 是对称算法。它效率高,但参与方必须安全共享和保存密钥。

非对称加密使用公钥和私钥对。在适当模式中,公钥可以为私钥持有者加密。公钥密码学也支持签名,但签名不是加密。

许多协议结合两种类型。公钥方法建立或保护临时对称密钥。经过身份验证的对称加密保护数据。协议还会验证参与方、绑定上下文并阻止重放。

密钥、证书和令牌集合提供相关工具。证书通过签名链将身份与公钥关联。JWT 可以签名或加密。其 Base64url 片段不会使它保密。

静态数据和传输中数据的加密

静态数据加密根据威胁模型保护数据。磁盘加密有助于保护关机设备丢失后的数据。字段加密可以限制部分数据路径。副本、日志、导出、索引和缓存需要单独检查。

传输中加密保护端点之间的通信。TLS 是常见的 Web 示例。数据一旦被授权端点解密,传输中加密就不再保护数据。扩展、受损设备、日志和授权用户仍可能访问明文。

如果不说明范围,“已加密”是不完整的说法。请询问保护哪些数据、加密从哪里开始到哪里结束、谁控制密钥,以及包含哪些攻击者。

Message Authentication Code 属于哪一类?

消息认证码(MAC)使用秘密密钥,在共享密钥的参与方之间保护完整性和真实性。HMAC 将密码学哈希与特定构造结合。它不是简单哈希,也不会加密内容。

NIST FIPS 198-1 规定 HMAC。拥有密钥的接收方可以检查消息和 Tag 是否匹配。Tag 不会恢复消息。拥有共享密钥并能检查的人也能生成有效 Tag。

消息可以保持可见,但你必须检测参与方之间的更改时,请使用 MAC。还需要机密性时,请使用经过身份验证的加密。验证必须使用公钥时,请使用签名。

数字签名属于哪一类?

数字签名使用私钥签名,并使用公钥验证。它面向真实性和完整性。在某些系统中,它还支持不可否认性。它不会隐藏签名内容。

签名通常作用于结构化表示或哈希。规范化很重要,因为两个序列可能表示相似的可读数据。协议还必须绑定算法、上下文、标识符和有效期。

NIST SP 800-175B 说明联邦密码学标准。开发者应使用维护良好的库和成熟协议。不要从孤立输出中拼接原语。

这些操作如何协同工作?

安全应用通常会按固定顺序使用多种转换。请考虑通过 JSON 传输的加密消息:

  1. 应用将明文序列化为准确的字节序列。
  2. 经过身份验证的算法使用密钥和 Nonce 生成密文和 Tag。
  3. Base64url 对二进制字段编码,使 JSON 可以传输它们。
  4. 接收方解码 Base64url,然后执行经过身份验证的解密。
  5. 如果身份验证失败,接收方拒绝消息。

编码层提供表示形式。加密层提供机密性和完整性。只反转编码会显示密文,而不是明文。省略身份验证会使设计无效。

另一种流程可以计算公共文件的哈希,为哈希签名,并使用 Base64 编码签名。哈希生成固定输入。签名将其绑定到私钥。Base64 让签名可以作为文本传输。每个步骤承诺不同功能。

决策帮助

请从所需结果开始,不要从输出外观开始。

要求 方法 重要条件
将二进制字节放入文本字段 编码 两个系统约定相同变体
使用可靠哈希比较文件 密码学哈希 从可靠来源获取哈希
检测共享秘密参与方之间的更改 MAC 保护并轮换共享密钥
隐藏内容并检测更改 经过身份验证的加密 始终遵守密钥和 Nonce 规则
存储密码验证值 密码哈希或 KDF 使用唯一 Salt 和合适成本
允许公开验证发布者 数字签名 保护私钥并验证身份
检测意外错误 校验和 不要声称可以抵抗攻击者

授权系统必须恢复输入时,不可逆哈希就是错误选择。不需要机密性时,加密可能增加不必要的密钥风险。只需要兼容性时,请使用有文档的编码和单独的安全控制。

常见错误

错误 1:将不可读文本视为安全

看起来随机的输出不能证明任何事情。Base64、十六进制、压缩数据、哈希和密文都可能看起来陌生。请识别操作和属性。

错误 2:不进行身份验证就加密

机密性不能证明密文未被更改。请优先使用成熟的、经过身份验证的构造。在使用明文前检查 Tag。

错误 3:重复使用 Nonce 或初始化向量

要求取决于算法和模式。有些要求唯一性,有些要求不可预测性。错误重复使用可能泄露文本之间的关系或身份验证密钥。

错误 4:将密钥与密文放在一起

将密钥放在数据旁边可能取消威胁边界。请使用合适的秘密或密钥管理系统。限制访问,记录操作,轮换密钥,并规划恢复。

错误 5:对低熵秘密使用快速哈希

攻击者可以离线测试短值或常见值。请使用专用密码构造。遵循当前平台和安全指导。

错误 6:信任来自同一受损来源的哈希

替换文件的攻击者也可以替换附近的哈希。请使用签名清单、可靠渠道或独立的经过身份验证的来源。

错误 7:设计新的密码协议

安全原语可能在不安全的组合中失败。重要系统请优先使用经过审查的标准、成熟库、安全值和专家检查。

使用浏览器工具的安全流程

浏览器工具有助于学习、格式转换、诊断和检查。请对受控数据使用以下流程:

  1. 确定需要表示、完整性、身份验证还是机密性。
  2. 从示例中移除生产秘密和个人数据。
  3. 为操作选择具体工具。
  4. 确认算法、字母表、模式、填充和输出编码。
  5. 在信任未知结果前测试已知示例。
  6. 在独立检查通过前保留原件。
  7. 在生产代码中使用维护良好的库。

Tool Factory 的路径将学习与准确操作连接起来。从 Base64开始,检查哈希格式(英文页面),计算 SHA-2 哈希,或检查 AES(英文页面)。每个页面都会说明用途和替代方案。

常见问题

哈希可以替代加密吗?

不能。哈希不会恢复输入。指纹和适当的完整性任务请使用哈希。需要授权恢复时,请使用加密。

加密可以替代哈希吗?

不一定。加密需要密钥管理,并且同一文本可能生成不同输出。哈希无需密钥即可提供稳定值。经过身份验证的加密包含完整性,但使用不同的访问模型。

SHA-256 是加密吗?

不是。SHA-256 属于 SHA-2 系列。它生成 256 位哈希,没有解密密钥。

AES 是哈希吗?

不是。AES 是对称分组加密。应用通过模式或构造使用它。正确实现的 AES-GCM 可以提供经过身份验证的加密。

Base64 会减小数据大小吗?

不会。Base64 通常会增加数据大小,因为它使用有限文本字母表表示字节。压缩是另一种操作,通常在 Base64 前进行。

哪种方法可以保护 API 令牌?

这取决于系统。请通过 TLS 传输令牌。请将它存储在秘密系统中。限制并轮换访问。如果不需要恢复原文,可以使用哈希进行检查。编码不提供保护。

哪种加密算法最安全?

没有名称可以保证系统安全。请通过维护良好的库使用当前的、经过身份验证的构造。遵循密钥、Nonce、Tag 和错误规则。评估完整协议和威胁模型。

最终选择规则

编码改变表示形式。哈希生成不可逆值。加密使用密钥保护可恢复内容。MAC 和签名增加简单哈希无法提供的身份验证模型。

请在选择前写下所需属性。然后选择当前标准、维护良好的实现和受控密钥生命周期。浏览器工具适合学习和有限转换。生产安全需要经过验证的协议。