欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

serv-u 15.2 15.3 密文密码算法 Argon2 示例 AG chatgpt 有大用 有大大用 有大大大用 有大大大大用 有大大大大大用

还要计算 Argon2id ,因为 serv-u 使用的是 Argon2id 

可以看看  /node-admin/20965


下面是自己亲自实现的生成argon2 argon2id加密的代码:

import os
import argon2
import binascii
import base64

# 生成16个随机字节作为盐值
# salt = os.urandom(16)
# print(salt)
salt = bytes([0xD1, 0xF9, 0x74, 0xD1, 0x30, 0xC5, 0xA6, 0x08, 0x4F, 0x98,0xAB, 0x7C, 0x9C, 0x4A, 0x0C, 0xED])
#字节码也可以用下面的方法
# salt = b"\xd1\xf9\x74\xd1\x30\xc5\xa6\x08\x4f\x98,0xab\x7c\x9c\x4a\x0c\xed"
# 明文密码
PASSWORD =b"TestPassword"

# 使用Argon2id进行密码加密
hasher = argon2.PasswordHasher(memory_cost=16384, time_cost=2, parallelism=1, hash_len=32)
hashed_password = hasher.hash(PASSWORD,salt=salt)
print(hashed_password)
base64_hash = hashed_password.split("$")[-1]
remainder  = len(base64_hash) % 4
pad = 4 - remainder
if( pad==1  or  pad==2):
    base64_hash +=pad*"="

print(base64_hash.encode())
bytes_hash = base64.b64decode(base64_hash)
print(bytes_hash)
print(bytes_hash.hex())



serv-u_validate_password_ok_ok.py     #验证argon2 argon2id 密码

#!/usr/local/python3.10.4/bin/python3.10
#
import os
import argon2
import binascii
import base64
import sys
# 生成16个随机字节作为盐值
# salt = os.urandom(16)
# print(salt)
def main(password,hex_salt):
    salt = binascii.unhexlify(hex_salt)
    # 明文密码
    PASSWORD = password

    # 使用Argon2id进行密码加密
    hasher = argon2.PasswordHasher(memory_cost=16384, time_cost=2, parallelism=1, hash_len=32)
    hashed_password = hasher.hash(PASSWORD,salt=salt)
    # print(hashed_password)
    base64_hash = hashed_password.split("$")[-1]
    remainder  = len(base64_hash) % 4
    pad = 4 - remainder
    if( pad==1  or  pad==2):
        base64_hash +=pad*"="

    # print(base64_hash.encode())
    bytes_hash = base64.b64decode(base64_hash)
    return bytes_hash.hex()

if __name__ == "__main__":
    if len(sys.argv) > 1:   #跟在后面的参数,比如 python 本文件名.py  arg1  arg2
        password = sys.argv[1]
        hex_salt = sys.argv[2]
        result = main(password,hex_salt)
        print(result)  # 输出到控制台,以便 PHP 可以捕获
    else:
        print("0")



serv-u_make_password_ok_ok.py     #生成argon2 argon2id 密码

#!/usr/local/python3.10.4/bin/python3.10
#
import os
import argon2
import binascii
import base64
import sys
# 生成16个随机字节作为盐值
# salt = os.urandom(16)
# print(salt)
def main(password):
    salt = os.urandom(16);
    # 明文密码
    PASSWORD = password

    # 使用Argon2id进行密码加密
    hasher = argon2.PasswordHasher(memory_cost=16384, time_cost=2, parallelism=1, hash_len=32)
    hashed_password = hasher.hash(PASSWORD,salt=salt)
    # print(hashed_password)
    base64_hash = hashed_password.split("$")[-1]
    remainder = len(base64_hash) % 4
    pad = 4 - remainder
    if (pad == 1 or pad == 2):
        base64_hash += pad * "="

    # print(base64_hash.encode())
    bytes_hash = base64.b64decode(base64_hash)
    salt_hex = salt.hex()
    bytes_hash_hex = bytes_hash.hex()
    # print(salt_hex)
    # print(bytes_hash_hex)
    return "00:"+salt_hex+bytes_hash_hex
if __name__ == "__main__":
    if len(sys.argv) > 1:   #跟在后面的参数,比如 python 本文件名.py  arg1
        password = sys.argv[1]
        result = main(password)
        print(result)  # 输出到控制台,以便 PHP 可以捕获
    else:
        print("0")





monica 生成的完整的 生成hash 和 验证 hash的功能

import argon2

# 设置密码哈希参数
hasher = argon2.PasswordHasher(memory_cost=16384, time_cost=2, parallelism=1, hash_len=32)

# 设置要加密的密码
PASSWORD = "mypassword"
salt = b'some_salt'

# 生成密码哈希
hashed_password = hasher.hash(PASSWORD, salt=salt)
print(f"生成的密码哈希: {hashed_password}")

# 验证密码
def verify_password(password, hashed_password):
    try:
        hasher.verify(hashed_password, password)
        return True
    except argon2.exceptions.VerificationError:
        return False

# 测试密码验证
if verify_password(PASSWORD, hashed_password):
    print("密码验证成功!")
else:
    print("密码验证失败。")


在这个示例中,我们首先设置了 Argon2 密码哈希的参数,包括内存开销、时间成本、并行度和哈希长度。

然后,我们设置了一个要加密的密码 PASSWORD 和一个盐值 salt。使用 hasher.hash() 方法生成密码哈希,并打印出结果。

接下来,我们定义了一个 verify_password() 函数,它接受两个参数:明文密码和已经生成的密码哈希。在函数内部,我们使用 hasher.verify() 方法来验证密码是否与哈希值匹配。如果验证成功,则返回 True,否则返回 False。

最后,我们调用 verify_password() 函数来测试刚刚生成的密码哈希,并输出验证结果。

请注意,在真实的应用中,您需要将生成的密码哈希值安全地存储在数据库或其他安全位置,以供后续验证使用。



在linux centos 上安装 python 见  /node-admin/19825

要安装的模块 没有外网的情况下如何安装,见 /node-admin/20999

pip3 install argon  -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

pip3 install argon2-cffi  -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com



image.png

image.png

image.png

image.png

image.png

image.png


serv-u 15 Argon2  python示例

下面是一个使用Argon2密码哈希算法和盐值生成密码密文的示例代码:

python

import hashlib import binascii import os password = "8x00n4vk" salt = os.urandom(16) # 使用Argon2算法对密码和盐值进行哈希处理 hasher = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 100000, dklen=32) # 将盐值和哈希结果拼接在一起 salt_hex = binascii.hexlify(salt).decode() hash_hex = binascii.hexlify(hasher).decode() final_hash = salt_hex + hash_hex print("生成的密码密文:", final_hash)    



这段代码通过Python使用Argon2密码哈希算法对密码进行加密。首先,使用 os.urandom(16) 生成一个16字节的随机盐值,然后使用 hashlib.pbkdf2_hmac() 函数以SHA-256为哈希算法生成密码的哈希值。最后将盐值和哈希结果转换成十六进制字符串,并拼接在一起形成最终的密码密文。


serv-u 15 Argon2  python 示例 验证明文与密码是否吻合匹配

在Python中,您可以使用以下示例代码来验证明文密码与存储的Argon2密码密文是否匹配:

python

import hashlib import binascii import os def verify_password(password, stored_hash):    # 从存储的密码密文中提取出盐值和哈希值    stored_salt = stored_hash[:32]    stored_hash = stored_hash[32:]    # 使用相同的盐值和密码生成哈希值    hasher = hashlib.pbkdf2_hmac('sha256', password.encode(), binascii.unhexlify(stored_salt), 100000, dklen=32)    computed_hash = binascii.hexlify(hasher).decode()    # 验证密码哈希是否相等    if computed_hash == stored_hash:        return True    else:        return False password = "8x00n4vk" stored_hash = "存储的Argon2密码密文" if verify_password(password, stored_hash):    print("密码匹配") else:    print("密码不匹配")    



这段代码定义了一个 verify_password 函数,用于验证明文密码与存储的Argon2密码密文是否匹配。函数首先从存储的密码密文中提取出盐值和哈希值,然后使用相同的盐值和密码生成哈希值,最后比对生成的哈希值和存储的哈希值是否相等。通过调用这个函数,您可以实现验证明文密码与存储的密码是否匹配的功能。







serv-u 15 Argon2  php示例

在 PHP 中,您可以使用 libsodium 扩展来使用 Argon2 哈希算法。以下是一个示例代码:

php

// 安装 libsodium 扩展:https://www.php.net/manual/en/sodium.installation.php $password = "8x00n4vk"; $salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES); // 生成随机盐值 // 使用 Argon2i 算法对密码进行哈希处理 $hash = sodium_crypto_pwhash_str($password, SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE); echo "生成的密码密文: " . $hash;    



这段代码使用了 sodium_crypto_pwhash_str() 函数来使用 Argon2i 算法对密码进行哈希处理。需要确保已经安装 libsodium 扩展并启用相关函数。这个示例是一个基本的使用 Argon2 算法生成密码密文的示例,可以根据需要进一步调整和改进。



serv-u 15 Argon2  php示例 验证明文与密码是否吻合匹配

在 PHP 中,您可以使用 libsodium 扩展来验证明文密码与存储的 Argon2 密文是否匹配。以下是一个示例代码:

php

// 安装 libsodium 扩展:https://www.php.net/manual/en/sodium.installation.php $password = "8x00n4vk"; $storedHash = "存储的Argon2密码密文"; // 使用 sodium_crypto_pwhash_str_verify() 函数验证明文密码与存储的密码密文是否匹配 $isMatch = sodium_crypto_pwhash_str_verify($storedHash, $password); if ($isMatch) {    echo "密码匹配"; } else {    echo "密码不匹配"; }    



这段代码中,我们使用 sodium_crypto_pwhash_str_verify() 函数来验证明文密码与存储的 Argon2 密文是否匹配。如果密码匹配,则返回 true,否则返回 false。通过这种方式,您可以验证用户输入的密码是否与存储的密码密文相匹配,以实现密码验证功能。请注意,这是一个基本示例,具体实现可能会根据应用程序的需求而有所调整和改进。




serv-u 15 生成Argon2  shell脚本 示例

在Shell脚本中生成Argon2密码哈希值并存储起来,您可以使用argon2命令行工具。请注意,该工具可能需要额外安装,具体方式取决于您使用的操作系统。

以下是一个示例Shell脚本,用于生成Argon2密码哈希值并输出到标准输出:

bash

#! /bin/bash password="8x00n4vk" salt=$(openssl rand -hex 12) # 使用argon2命令生成Argon2密码哈希值 hash=$(echo -n $password | argon2 somesalt=$salt -id -t 2 -m 16 -p 8 -l 32 -r) echo $hash    



在这个示例中,我们首先定义了要哈希的明文密码和一个随机的盐值。然后使用argon2命令生成Argon2密码哈希值。在这里,我们指定了一些参数,比如迭代次数、内存消耗、线程数等。最后,将生成的密码哈希值打印到标准输出。

您可以将这个脚本保存为一个.sh文件,然后在Shell中运行它以生成Argon2密码哈希值。请确保在运行脚本之前已经安装了argon2工具。




serv-u 15 Argon2  shell脚本示例 验证明文与密码是否吻合

在Python中,您可以使用以下示例代码来验证明文密码与存储的Argon2密码密文是否匹配:

python

import hashlib import binascii import os def verify_password(password, stored_hash):    # 从存储的密码密文中提取出盐值和哈希值    stored_salt = stored_hash[:32]    stored_hash = stored_hash[32:]    # 使用相同的盐值和密码生成哈希值    hasher = hashlib.pbkdf2_hmac('sha256', password.encode(), binascii.unhexlify(stored_salt), 100000, dklen=32)    computed_hash = binascii.hexlify(hasher).decode()    # 验证密码哈希是否相等    if computed_hash == stored_hash:        return True    else:        return False password = "8x00n4vk" stored_hash = "存储的Argon2密码密文" if verify_password(password, stored_hash):    print("密码匹配") else:    print("密码不匹配")    



这段代码定义了一个 verify_password 函数,用于验证明文密码与存储的Argon2密码密文是否匹配。函数首先从存储的密码密文中提取出盐值和哈希值,然后使用相同的盐值和密码生成哈希值




serv-u 15 Argon2id  python示例  

Serv-U 15开始支持使用Argon2id作为密码哈希算法,以增强安全性。要在Python中实现与Serv-U 15兼容的Argon2id密码哈希处理,你可以使用passlib库中的argon2模块。请注意,虽然Serv-U具体内部实现细节可能有所不同,但使用passlibargon2模块可以帮助你创建与Argon2id规范兼容的哈希值。

首先,确保你已经安装了passlib库。如果未安装,可以通过pip安装:

Bash            
1pip install passlib



然后,以下是一个使用passlib创建Argon2id哈希的简单示例:

Python            
1from passlib.hash import argon2
2
3# 用户明文密码
4plain_password = "yourplaintextpassword"
5
6# 使用Argon2id创建哈希
7hashed_password = argon2.using(memory_cost=16384, parallelism=1,time_cost=2).hash(plain_password)
8
9print("Hashed Password:", hashed_password)
10
11# 验证密码
12if argon2.verify(plain_password, hashed_password):
13    print("Password verified.")
14else:
15    print("Password does not match.")



在这个示例中,我们通过.using()方法自定义了Argon2id的一些参数,比如迭代轮数(rounds)、内存成本(memory_cost)和并行度(parallelism)。这些参数可以根据你的安全需求进行调整,以达到计算强度和性能之间的平衡。Serv-U在配置时可能有其推荐的参数设置,建议参照官方文档或实际需求来设定这些值。

请注意,尽管此示例展示了如何在Python中生成和验证Argon2id哈希,直接将生成的哈希应用于Serv-U服务器配置或用户管理可能需要遵循Serv-U的具体导入或配置步骤,这可能包括通过Serv-U管理界面或其他提供的工具来设置用户密码哈希。务必参考Serv-U的官方文档来了解如何正确实施。






serv-u 15 Argon2id  python示例

#!/usr/bin/python3
#
import hashlib
import binascii

from passlib.hash import argon2

# 密码明文
password = "password123"

# 通过Argon2id算法对密码进行哈希
hashed_password = argon2.hash(password)

# 打印哈希后的密码
print("哈希后的密码:", hashed_password)

# 验证密码
if argon2.verify(password, hashed_password):
print("密码验证成功")
else:
print("密码验证失败")




serv-u 15 Argon2id  python示例

Serv-U 15采用Argon2id作为密码哈希算法的一种加密方式。下面是一个示例Python代码,演示如何使用Argon2id加密密码和验证密码:

首先,你需要安装argon2-cffi库,你可以使用pip进行安装:

bash

pip install argon2-cffi    


然后,你可以使用以下Python代码示例来生成Argon2id哈希密码和验证密码:

python

from argon2 import PasswordHasher from argon2.exceptions import VerifyMismatchError # 创建一个密码哈希器对象 ph = PasswordHasher() # 加密密码 password = "your_password_here" hash = ph.hash(password) print("Hashed password: ", hash) # 验证密码 check_password = "password_to_check" try:    ph.verify(hash, check_password)    print("Password matched!") except VerifyMismatchError:    print("Password not matched!")    


请注意,这只是一个简单的示例代码,实际情况可能会根据Serv-U 15的具体实现和要求而有所不同。建议查看Serv-U 15文档以获取更详细的信息和示例代码。






serv-u 15 Argon2id  python示例

Serv-U 15中使用的Argon2算法是Argon2id的一种变体。请使用以下Python示例代码演示如何使用Argon2算法对密码进行哈希和验证:

首先,你需要在Python环境中安装argon2-cffi库。你可以使用以下命令进行安装:

bash

pip install argon2-cffi    


然后,你可以使用以下Python代码示例来生成Argon2哈希密码和验证密码:

python

from argon2 import PasswordHasher from argon2.exceptions import VerifyMismatchError # 创建一个密码哈希器对象 ph = PasswordHasher() # 设置参数,这里使用Argon2默认参数 hash = ph.hash("your_password_here") print("Hashed password: ", hash) # 验证密码 check_password = "password_to_check" try:    ph.verify(hash, check_password)    print("Password matched!") except VerifyMismatchError:    print("Password not matched!")    


这段代码会使用Argon2算法对密码进行哈希,并将哈希后的密码打印出来。然后,它会尝试验证另一个密码是否与哈希后的密码匹配,并输出相应的结果。

请注意,以上代码示例仅用于演示如何使用Argon2算法进行密码哈希和验证,实际应用中可能需要根据具体情况进行调整。另外,建议查阅Serv-U 15的文档以获取与其集成Argon2算法的详细信息。



linux argon2 生成hash结果为大写

在Linux中使用Argon2生成哈希值时,哈希结果的格式(包括大小写)通常是由生成哈希的库或工具决定的。然而,大多数哈希值(包括Argon2)在内部表示时是不区分大小写的,因为它们是由十六进制数字组成的(即0-9和A-F)。

但是,如果你希望生成的Argon2哈希值全部为大写,你可以在生成哈希后使用字符串处理工具(如tr命令)来转换它。

以下是一个简单的示例,说明如何在bash脚本中使用argon2命令(假设你的系统上有这样的命令或类似的工具)并将结果转换为大写:

bash复制代码                

#!/bin/bash                                  



# 假设我们有一个密码和salt,以及Argon2的参数                                  

password="mypassword"  

salt="somerandomsalt"  

time_cost=4

memory_cost=1024

threads=1



# 使用argon2生成哈希(这只是一个示例命令,你需要根据你的系统进行调整)                                  

# 注意:不是所有的Linux发行版都内置了argon2命令,你可能需要安装一个库或工具                                  

hash_output=$(echo -n "$password$salt" | argon2 -t $time_cost -m $memory_cost -p $threads)



# 将哈希输出转换为大写                                  

hash_uppercase=$(echo "$hash_output" | tr '[:lower:]' '[:upper:]')



# 输出结果                                  

echo "Original Hash: $hash_output"  

echo "Uppercase Hash: $hash_uppercase"                                
               

但是,请注意,argon2命令在Linux上可能并不是内置的,你可能需要安装一个支持Argon2的密码哈希库或工具,如argon2-cffi(Python库)或libsodium(一个包含Argon2的加密库)。

如果你使用的是Python,你可以使用argon2-cffi库来生成Argon2哈希,并使用Python的字符串方法将结果转换为大写:

python复制代码                

import argon2

from argon2 import PasswordHasher



password = b"mypassword"  # 密码必须是bytes类型                                  

salt = b"somerandomsalt"  # 盐也必须是bytes类型                                  



# 创建一个密码哈希器实例                                  

hasher = PasswordHasher()



# 使用哈希器和密码、盐以及任何其他参数生成哈希                                  

hash_output = hasher.hash(password, salt=salt)



# 将哈希输出转换为大写(但请注意,哈希值通常是大小写不敏感的)                                  

hash_uppercase = hash_output.upper()  # 注意:这实际上可能不会有任何效果,因为哈希值只包含十六进制字符                                  



# 输出结果                                  

print("Original Hash:", hash_output)

print("Uppercase Hash:", hash_uppercase)  # 这将和原始哈希相同,因为哈希值只包含十六进制字符                                
           

文心大模型3.5生成


python 生成 随机16个字节 , 每个字节在 0x00-0xFF范围内

在Python中,要生成一个包含16个字节,每个字节范围在0x00-0xFF之间的随机序列,可以使用os.urandom()函数或者secrets模块来实现。下面是两种方法的示例代码:

使用 os.urandom()

Python
1import os
2
3random_bytes = os.urandom(16)
4print(random_bytes.hex())  # 打印为16进制字符串,方便阅读

使用 secrets 模块

Python
1import secrets
2
3random_bytes = secrets.token_bytes(16)
4print(random_bytes.hex())  # 打印为16进制字符串

os.urandom() 函数从操作系统中获取随机数据,适合于需要高安全性随机数的场景,如加密密钥的生成。

secrets 模块是Python 3.6版本后引入的,专为密码学安全的随机数设计,特别适合生成安全的随机密钥等。

上述两种方式都可以确保生成的随机字节在指定范围内,并且足够安全。



linux shell agron2id salt 为 字节字符串示例

在Linux shell中,argon2id是一种密码哈希算法,它结合了Argon2i和Argon2d的优点,适用于一般密码存储场景。当你提到“salt”时,这是指在哈希过程中添加的一个随机值,用来增加密码哈希的唯一性和抵抗彩虹表攻击。

要使用argon2id生成一个哈希值,并附带一个随机的salt,通常会用到openssl或其他特定于系统的命令行工具,比如某些Linux发行版内置的mkpasswd(如果它支持argon2)。但请注意,不是所有系统默认都支持argon2id直接通过openssl,可能需要安装额外的工具或库。

这里提供一个基于openssl的例子,但请注意,openssl默认可能不支持argon2id,而支持的是argon2iargon2d。如果你确实需要argon2id且系统不直接支持,可能需要安装并使用其他工具如argon2

使用openssl(如果支持argoon2id)

假设你的系统上的openssl支持-algorithm argon2id,创建一个带随机salt的哈希可以这样尝试(但请先确认支持情况):

Bash
1openssl passwd -stdin -algorithm argon2id

然后输入你的明文密码,它会自动生成带有salt的哈希值。

使用mkpasswd(如果可用且支持argon2id)

一些系统提供了mkpasswd命令,且支持-m argon2id选项:

Bash
1mkpasswd --method=argon2id --stdin

同样地,这个命令会读取标准输入的明文密码并输出哈希值。

安装并使用独立的argon2工具

如果上述命令都不适用,你可以安装一个独立的argon2工具,如libsodium库中的argon2命令行工具,然后使用类似下面的命令来生成哈希(这只是一个示意,具体命令根据实际安装的工具而定):

Bash
1echo -n "your-password" | argon2 hash -t 2 -m argon2id -p 4 -l 16

这里-t 2是时间成本,-m argon2id指定算法类型,-p 4是并行度,-l 16指定哈希长度为16字节。请注意,这些参数需要根据实际情况调整。

由于直接生成“字节字符串示例”作为salt在shell中不如生成哈希值常见,上述示例更多关注于如何生成带salt的哈希。如果你纯粹需要生成一个随机的salt字节串(例如用于进一步处理),可以考虑使用xxdhead或类似的工具来生成并限制长度,例如:

Bash
1openssl rand -hex 16 | xxd -r -p

这会生成一个16字节的随机二进制数据,可以作为salt使用。




linux shell agron2id salt 为 16个字节字符串示例,要求每个字节在 0x00-0xFF范围内

要生成一个16字节的随机字符串作为salt,并确保每个字节的值在0x00-0xFF范围内,你可以直接使用openssl rand命令来完成。这个命令能够安全地生成指定长度的随机数据。下面是如何生成一个16字节的随机字符串作为salt的示例命令:

Bash
1openssl rand -hex 16

这条命令会生成32个字符的十六进制字符串,代表16个字节的随机数据,每个字节的值范围正是0x00-0xFF。

如果你需要以二进制形式(而不是十六进制字符串)查看或使用这个salt,可以结合使用xxd命令来转换格式,尽管在大多数需要salt的上下文中,十六进制表示已经足够使用。但如果你确实需要二进制表示,可以这样做(虽然在Shell脚本中直接操作二进制数据并不常见):

Bash
1# 生成16字节的随机二进制数据并以xxd的默认格式显示
2openssl rand 16 | xxd -g1

这将会输出一个更直观的二进制表示,每个字节后面跟一个空格,适合查看。不过,通常在编程或脚本处理时,保持为十六进制字符串格式更为方便和通用。




echo -n "1CE2ACB4EFF54FFD797F60B085AC77158x00n4vk" | argon2 "1CE2ACB4EFF54FFD797F60B085AC7715" -t 2 -m 14 -p 1 -l 32 -id







好的,让我再给你一个使用随机生成的 16 字节盐的 Argon2 密码散列生成示例:


python

复制

import os

from argon2 import PasswordHasher


# 明文密码

password = "MyStrongPassword123"


# 生成 16 字节的随机盐

salt = os.urandom(16)


# 初始化 Argon2 密码散列器

hasher = PasswordHasher(

    time_cost=2,

    memory_cost=16384,

    parallelism=1,

    hash_len=32,

    salt_len=16,

)


# 生成密码散列

hashed_password = hasher.hash(password, salt=salt)


print(f"生成的密码散列: {hashed_password}")

主要步骤如下:


导入 os 模块用于生成随机盐。

定义明文密码 password。

使用 os.urandom(16) 生成 16 字节的随机盐 salt。

初始化 PasswordHasher 对象,设置 Argon2 的参数。

使用 hasher.hash(password, salt=salt) 方法生成密码散列,并传入自定义的盐。

打印生成的密码散列。

与前一个示例相比,这个示例生成了一个随机的 16 字节盐,并将其作为参数传入 hasher.hash() 方法。


生成的密码散列格式为:


ruby

复制

$argon2i$v=19$m=16384,t=2,p=1$[16 字节的盐]$[32 字节的散列值]

其中,盐和散列值都是经过 Base64 编码的字符串。


在实际应用中,生成的密码散列应该安全地存储在数据库中,而不是直接打印出来。当用户登录时,可以使用 hasher.verify(hashed_password, password) 方法验证密码是否正确。


普通分类: