开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Python加密

Pythonbcrypt教程展示了如何使用bcrypt库在Python中散列密码。它定义了基本术语,包括加密、散列和盐。

Pythonbcrypt模块是一个用于在Python中生成强哈希值的库。它使用pipinstallbcrypt命令安装。

加密

加密是对消息或信息进行编码的过程,只有经过授权的人才能使用相应的密钥读取它,而未经授权的人则不能。预期的信息或消息,称为明文,使用加密算法加密-a密码-生成只有解密后才能读取的密文。加密是双向函数。当我们加密某些东西时,我们这样做是为了以后解密它。加密用于在传输时保护数据;例如在邮件通信中。

散列

Hashing是使用算法将任意大小的数据映射到固定长度的过程。这称为散列值。加密是双向函数,而散列是单向函数。虽然反向散列值在技术上是可行的,但所需的计算能力使其不可行。加密是为了保护传输中的数据,而散列是为了验证数据没有被更改并且是真实的。

密码不是以明文形式存储在数据库中,而是以散列值形式存储。

Salt是一个固定长度的加密强随机值,它被添加到哈希函数的输入中,为每个输入创建唯一的哈希值。添加盐以使密码哈希输出具有唯一性,即使对于采用普通密码的用户也是如此。

bcrypt哈希函数

bcrypt是一种密码哈希函数,由NielsProvos和DavidMazières设计,基于Blowfish密码。bcrypt函数是OpenBSD的默认密码哈希算法。有用于C、C++、C#、Java、JavaScript、PHP、Python和其他语言的bcrypt实现。

bcrypt算法使用强加密技术为我们创建散列和加盐密码。算法的计算成本是参数化的,因此它可以随着计算机速度的提高而增加。计算成本称为工作因素成本因素。它减慢了散列,使蛮力尝试更难和更慢。随着计算机变得越来越快,最佳成本因素会随着时间的推移而变化。高成本因素的缺点是会增加系统资源的负载并影响用户体验。

Pythonbcrypt创建散列密码

在下一个示例中,我们创建一个散列密码。

#!/usr/bin/python

import bcrypt

passwd = b's$cret12'

salt = bcrypt.gensalt()
hashed = bcrypt.hashpw(passwd, salt)

print(salt)
print(hashed)

该示例使用bcrypt创建盐和散列密码。

import bcrypt

我们导入bcrypt模块。

salt = bcrypt.gensalt()

使用gensalt函数生成盐。

hashed = bcrypt.hashpw(passwd, salt)

使用hashpw函数创建散列值,该函数将明文值和盐作为参数。

$ python first.py
b'$2b$12$mwSIOyxLJid1jFLgnU0s0.'
b'$2b$12$mwSIOyxLJid1jFLgnU0s0.7pmzp8Mtx.GEO30x0AbI2v8r2sb98Cy'
$ python first.py
b'$2b$12$MgGs11HIXGkg1Bm1Epw0Du'
b'$2b$12$MgGs11HIXGkg1Bm1Epw0Du20TV8ppi2Latgq7kKng8UjM5ZFWKKeS'

请注意,salt是生成的哈希值的第一部分。另请注意,每次都会生成唯一的salt和哈希值。

Pythonbcrypt校验密码

以下示例根据散列值检查密码。

#!/usr/bin/python

import bcrypt

passwd = b's$cret12'

salt = bcrypt.gensalt()
hashed = bcrypt.hashpw(passwd, salt)

if bcrypt.checkpw(passwd, hashed):
    print("match")
else:
    print("does not match")

使用checkpw函数检查密码。

$ python check_passwd.py
match

Pythonbcrypt成本因素

成本因素通过减慢散列来提高安全性。

#!/usr/bin/python

import bcrypt
import time

passwd = b's$cret12'

start = time.time()
salt = bcrypt.gensalt(rounds=16)
hashed = bcrypt.hashpw(passwd, salt)
end = time.time()

print(end - start)

print(hashed)

我们使用rounds参数将成本因子设置为16。我们测量生成密码哈希的时间。

$ cost_factor.py
4.268407821655273
b'$2b$16$.1FczuSNl2iXHmLojhwBZO9vCfA5HIqrONkefhvn2qLQpth3r7Jwe'

生成具有指定成本因子的哈希值需要超过四秒。

在本教程中,我们使用了Pythonbcrypt模块来生成密码哈希。

列出所有Python教程。

s

未经允许不得转载:我爱分享网 » Python加密

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏