Я хочу использовать JSON в Python для сохранения пользователей и пароля [закрыто]

select sum(A.Counter), A.id FROM(

    SELECT h.Id, count(h.Id) as Counter
    FROM #test_history1 h
    INNER JOIN #test_history2 t on h.TypeId = t.Id
    WHERE h.Code != 288
    GROUP BY h.TypeId, h.Id

    union
    SELECT h.Id, 1 as Counter
    FROM #test_history1 h
    INNER JOIN #test_history2 t on h.TypeId = t.Id
    WHERE h.Code = 288
    GROUP BY h.TypeId, h.Id
    )A
    GROUP BY A.id
-3
задан Brian Tompsett - 汤莱恩 19 January 2019 в 13:49
поделиться

1 ответ

Чтобы получить из файла json информацию, которую вы хотите сохранить (два списка), вы можете просто импортировать json, загрузить файл и запросить его как словарь.

Представьте, что у вас есть такой json:

{
    "users": ["Bacon", "Eggs", "Toast"],
    "passwords": ["Please don't do it this way though!", "runny", "buttered"]
}

Можно просто:

import json

path_to_json = "./stackoverflowexample.json"

with open(path_to_json, "r") as handler:
    info = json.load(handler)

users = info["users"]
passwords = info["passwords"]

print("User 0 '{}', has password '{}'".format(users[0], passwords[0]))

Это очень небезопасный метод хранения паролей, он очень неэффективен, и вы ' Скорее всего, в какой-то момент возникнут проблемы с согласованностью.

Гораздо лучший способ хранения паролей будет в базе данных, который позволит вам более эффективно запрашивать информацию, которую вы хотели, а также получать и хэшировать пароли, когда вы их получаете, чтобы они не хранились как удобочитаемые для человека. строки.

Пример:

import sqlite3
import hashlib
import uuid

user_table_definition = """
CREATE TABLE users (
    username TEXT,
    salt TEXT,
    hpassword TEXT
)"""
add_user_sql = "INSERT INTO users VALUES ('{}','{}','{}')"

connection = sqlite3.connect("./stackoverflowdb.db")
cursor = connection.cursor()

cursor.execute(user_table_definition)


# Add incoming user
username = "Bacon"
password = "This is a little better, but this is just an outline..."

salt = uuid.uuid4().hex
hashedpassword = hashlib.sha512((salt + password).encode("UTF-8")).hexdigest()

cursor.execute(add_user_sql.format(username, salt, hashedpassword))

# Check incoming user

username = "Bacon"
password = "This is a little better, but this is just an outline..."

row = cursor.execute("SELECT salt, hpassword FROM users WHERE username = '{}'".format(username)).fetchone()

salt, hpassword = row  # Unpacking the row information - btw this would fail if the username didn't exist

hashedIncomingPwd = hashlib.sha512((salt + password).encode("UTF-8")).hexdigest()

if hashedIncomingPwd == hpassword:
    print("Winner winner chicken dinner we have a live one!")
else:
    print("No access for you")

Это только показывает вам строки, которые составляют ядро ​​того, что вы хотите, вы должны переместить некоторые из этих строк в функции, вы не можете вызвать этот код дважды, потому что Стол уже должен быть создан и другие вопросы. Во-первых, вам не нужно использовать sqlite!

SQL - очень полезная вещь для изучения, и, учитывая, что ваш вопрос выглядит как хобби, я бы посоветовал разобраться с этим. Желаем удачи.

0
ответ дан hi im Bacon 19 January 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: