密码保护的Python(Password Protection Python)

2019-09-01 17:37发布

我有一个将在本地由一小群人(<15人)。但对于问责制所使用的小Python程序,我想有一个简单的用户名+密码检查在程序的开始(并不需要是超安全)。为了您的信息,我只是一个初学者,这是我第一次尝试它。当我搜索周围,我发现,蟒蛇对加密passlib。 但是,即使看虽然之后我仍然不知道如何实现我encryption.So,还有一些我想知道的几件事。

  1. 如何存储用户的密码在本地? 我知道此刻的唯一方法是创建一个文本文件,读/从它写,但将破坏加密的全部目的,因为人们可以打开文本文件,并从那里阅读。
  2. 什么哈希和盐手段加密,它是如何工作的? (简短而简单的解释就行了。)
  3. 什么是实现用户名和密码检查推荐的方式?

我的愚蠢的问题抱歉。 但我会非常感激,如果你能回答我的问题。

Answer 1:

import getpass
import pickle
import hashlib
from os import path

def Encryption(data):
    return hashlib.sha224(data).hexdigest()

## First we check if the database exists.
if path.isfile('database.db'):
    fh = open('database.db', 'rb')
    db = pickle.load(fh)
    fh.close()
## If it doesn't, we will create one.
else:
    ## First we create the desired variable.
    db = {'torxed' : Encryption('wham'), 'someoneelse' : Encryption('pass')}
    ## Then we open a filehandle to it.
    fh = open('database.db', 'wb')
    ## And then we dump the variable into the filehandle.
    ## This will keep the variable intact between sessions,
    ## meaning the next time you start your script, the variable will look the same.
    pickle.dump(db, fh)
    fh.close()


## Then we ask the user for his/hers credentials.
user = raw_input('Username: ')
_pass = getpass.getpass('Password: ')

## If the user exists in the "db" and the decoded password
## Matches the logged in user, it's a-ok :)
if user in db and db[user] == Encryption(_pass):
    print 'You logged in'

添加更多用户

import pickle, hashlib

def Encryption(data):
    return hashlib.sha224(data).hexdigest()

with open('database.db', 'rb') as fh:
    db = pickle.load(fh)

db['new_user'] = Encryption('password')

with open('database.db', 'wb') as fh:
    pickle.dump(db, fh)

另一种方法是使用sys.argv摆脱命令行的用户名和密码,当用户addings,在这种情况下:

import pickle, hashlib, sys
if len(sys.argv) < 3:
    raise ValueError('Need two parameters, username and password')

def Encryption(data):
    return hashlib.sha224(data).hexdigest()

with open('database.db', 'rb') as fh:
    db = pickle.load(fh)

db[sys.argv[1]] = Encryption(sys.argv[2])

with open('database.db', 'wb') as fh:
    pickle.dump(db, fh)


Answer 2:

你可以做散列这样。

import hashlib
def Encryption(data):
    return hashlib.sha224(data).hexdigest()

当你要保存的密码,然后调用该函数并保存编码密码。



Answer 3:

你可以使用味酸 ,它的一个简单的方法来序列化的东西到.pkl文件,该文件将难以只需打开和读取。



Answer 4:

你可以使用它安装在Apache或可需单独下载htpasswd的。 使用subprocess.check_output运行它,你可以创建Python的功能来添加用户,删除它们,确认他们已经给出了正确的密码等传递-B选项,使腌制,你会知道它是安全的(如果实现盐不像你自己)。



文章来源: Password Protection Python