Python 3密码scrypt
你好,我正在寻找一些帮助,使我的密码脚本python 3.我有一个程序的基本了解,但python是一种新的语言对我来说。我正在尝试为我的朋友和我建立的辅助移动服装做一个AI,包括旧的自行车零件,如齿轮和链条,直流电动机,以及很多很多的金属棒......对于我们使用的重型物品arduino但我的朋友负责这一部分..我已经在AI上工作,但在我走之前,我想知道是否有人可以帮我做一个通行代码脚本。 。Python 3密码scrypt
The_man113 = 'Password correct'
else:
print'passcode incorrect'
这是一个坏榜样,我知道不会工作,但有人可以:其实我用树莓派,因为我知道如何操作GPIO(或通用输入输出我已经使用像试过给我一些建议,我知道如何使用诸如制作计算器之类的东西,或者通过在背景中添加一些数字来使事情变得像知道所有事情一样,但是这真的让我难以接受,谢谢
那么,如果目标只是验证一个密码(没有密码DB),但你不想在脚本中存储该密码(任何人都可以阅读该文件可以看到它),你可以使用首先,决定一个密码,然后生成盐和散列(通过散列法产生适当的盐隐式地):
>>> import crypt
>>> password = input("Enter password:")
>>> print(crypt.crypt(password, crypt.METHOD_SHA512)) # Save this to add to verifier
我们使用input
,而不是实际的终端,因为作为3.4直接初始化变量,Python的交互式终端默认保存历史记录,并且我们不希望Python历史记录中的密码。我们会承认在世代期间肩上冲浪的风险,以换取您知道您没有输入错字(在使用时间,我们将使用getpass.getpass
来遮挡肩膀冲浪者)。
现在,在您的验证码:
import crypt
import getpass
PASSHASH = '...' # Hash from generation stage
# Loop until correct password given or user hits Ctrl-C to kill program
# crypt.crypt hashes include their salt, and can be used to salt another crypt
while crypt.crypt(getpass.getpass(), PASSHASH) != PASSHASH:
pass
# If we get here, the password was correct
print("Password accepted")
这种设计意味着用户谁可以看到源代码,无法看到密码;只要他们不能覆盖文件,他们也不能更改密码。
通过使用getpass.getpass
而不是input
,您还可以避免在输入密码时回显密码,从而最大限度地降低肩膀冲浪者看到密码的风险。
注意:此代码需要Python 3.3或更高版本;因为它使用crypt(3)
(一种已知的弱密码哈希系统),所以crypt
module在此之前对于安全密码哈希来说并不好。
通常的方法是使用单向加密哈希函数,例如:sha-256。
密码散列函数是这被认为是 实际上不可能以反转,即,重建从它的单独的散列值的输入数据 的哈希函数。
Python有一个内置的库:hashlib。
你必须保存你的代码中以前散列密码:
secure_hash = hashlib.sha256("This is the original password that will be hashed").hexdigest()
此代码将输出这样的:
759deb001f7fc1fceea917efd3b3dc7628f3b67633c7b77a2b77a7c3afa736a8
您将这个哈希字符串存储您的脚本中,然后用户在“登录”您使用用户密码进行相同操作并进行比较:
password_hash = hashlib.sha256("Incorrect password from the user").hexdigest()
然后比较:
if secure_hash != password_hash:
print("Incorrect password")
...
有一些注意事项,但... 一种方式的加密功能是不完美的,有一个非常非常非常小的机会,两个不同的字符串具有相同的哈希,这个机会实在是小但它存在。
注: 如果您在使用时hashlib有一个类型错误,则必须将字符串编码为UTF-8:
secure_hash = hashlib.sha256("This is the original password that will be hashed".encode("utf-8")).hexdigest()
而且......你一定不存储字符串使用创建您脚本中的secure_hash。
Unsalted密码哈希值受到预先计算的表攻击。简单哈希,即使是密码哈希,也不足以防止哈希颠倒。 Python提供'crypt'和'hashlib.pbkdf2_hmac'是有原因的。 – ShadowRanger
我会同意,如果我们在谈论互联网连接的设备,因为我们正在谈论某种类型的辅助硬件,如轮椅,除非黑客通过USB端口在物理上破解硬件,我不认为有必要额外的措施。 – Nazerbayev
'if raw_input(“Enter password:”)!=“hunter2”:print“access denied”'。 – Kevin
(oops,即2.7。使用'input'代替Python 3的'raw_input',并正确地加上你的'print'调用) – Kevin