登录
首页 >  文章 >  python教程

生成256位Argon2哈希的正确步骤

时间:2025-11-03 19:33:34 484浏览 收藏

在使用Argon2密码哈希算法生成256位哈希时,是否遇到了输出长度超出预期的困扰?本文深入解析Argon2输出的Base64编码问题,提供精准解决方案。Argon2默认对哈希值进行Base64编码,导致输出长度增加。要获得原始的32字节哈希值,需解码Base64编码。本文提供Python示例代码,展示如何使用`binascii.a2b_base64()`函数解码,并讲解了padding的必要性。掌握Base64编码在Argon2中的作用,助您正确生成和处理256位哈希值,确保密码安全。阅读本文,告别Argon2哈希长度困扰!

使用 Argon2 生成 256 位哈希值的正确方法

本文旨在解决在使用 Argon2 密码哈希算法生成 256 位(32 字节)哈希值时,输出长度超出预期的问题。我们将深入探讨 Base64 编码在 Argon2 输出中的作用,并提供正确解码 Base64 编码哈希值的示例代码,确保您能够获得所需的 256 位哈希值。

在使用 Argon2 密码哈希算法时,我们通常期望通过设置 hash_len 参数来控制输出哈希值的长度。然而,在某些情况下,即使我们将 hash_len 设置为 32(对应 256 位),实际输出的字符串长度可能会超过 32。 这通常是因为 Argon2 库默认对哈希值进行 Base64 编码。

Base64 是一种将二进制数据编码为 ASCII 字符串的编码方式。它使用 64 个不同的字符来表示二进制数据,因此编码后的字符串长度通常会比原始二进制数据更长。 具体来说,Base64 编码将每 3 个字节(24 位)的数据编码为 4 个字符。 由于 32 不是 3 的倍数,Base64 编码后的长度会是 4 的倍数且大于 32,因此会增加到 43(包含末尾的填充字符)。

为了获得原始的 256 位(32 字节)哈希值,我们需要对 Argon2 输出的 Base64 编码字符串进行解码。 可以使用 binascii.a2b_base64() 函数来实现。

以下是修改后的代码示例:

from argon2 import PasswordHasher
import binascii

password = "abc123"
salt = b'b8b17dbde0a2c67707342c459f6225ed'

hasher = PasswordHasher(
    salt_len=len(salt),
    hash_len=32,
)
hasherOutput = hasher.hash(password, salt = salt)
hash_encoded = hasherOutput.split('$')[-1]

# 确保字符串长度是 4 的倍数,如果不是,则添加 padding
padding_needed = len(hash_encoded) % 4
if padding_needed:
    hash_encoded += '=' * (4 - padding_needed)

hash_decoded = binascii.a2b_base64(hash_encoded)

print(len(hash_decoded))
print(hash_decoded)

# Output: 32
# Output: b'\x83\xe0\x04\xb7\x9f\xc0\x1a\x0e\x01\x99\x01\x83\x9e\x1c\x96\xb6\x87\xba\x8b\x89\xde\xd3\x05\x0e\xd0\x83\x9b\x91\xe3\x8e\x08\x99'

代码解释:

  1. 获取 Base64 编码的哈希值: hash_encoded = hasherOutput.split('$')[-1] 从 Argon2 返回的字符串中提取 Base64 编码的哈希值。
  2. 添加 Padding: 由于 Base64 编码需要输入长度为 3 的倍数,所以需要检查哈希值的长度是否为 4 的倍数,如果不是,则需要添加 = 字符进行填充,使得其长度为 4 的倍数。
  3. 解码 Base64 编码: hash_decoded = binascii.a2b_base64(hash_encoded) 使用 binascii.a2b_base64() 函数将 Base64 编码的字符串解码为原始的 32 字节二进制数据。

注意事项:

  • 在某些情况下,Base64 编码的字符串可能已经包含了正确的 padding。 在这种情况下,不需要手动添加 padding。
  • 确保您使用的 Argon2 库版本支持 hash_len 参数。

总结:

通过对 Argon2 输出的 Base64 编码字符串进行解码,我们可以获得原始的 256 位(32 字节)哈希值。 了解 Base64 编码在 Argon2 输出中的作用对于正确使用 Argon2 密码哈希算法至关重要。 通过本文提供的代码示例和注意事项,您可以轻松地生成和处理所需的 256 位哈希值。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《生成256位Argon2哈希的正确步骤》文章吧,也可关注golang学习网公众号了解相关技术文章。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>