私はこのスクリプトを持っています。これはユーザーをmongoデータベースに追加するための一時的な方法です。ハッシュパスワードはBSON形式で格納されていますBinData Type
操作は正常に実行されますが、パスワード用に生成されたハッシュはBSON Binary Data (a.k.a BinData)として保存されています。
#!/usr/bin/python3
import bcrypt
from getpass import getpass
from pymongo import MongoClient
def connect():
db_user = "mongo"
db_pass = "mongo"
db_addr = "127.0.0.1:27017"
uri = "mongodb://{0}:{1}@{2}".format(db_user,db_pass,db_addr)
client = MongoClient(uri,serverSelectionTimeoutMS=6000)
return client
try:
user_data = {}
user_data["Name"] = input("Full Name: ")
user_data["Sector"] = input("Sector: ")
user_data["Email"] = input("Email: ")
user_data["Username"] = input("Username: ")
password = getpass(prompt="Password: ").encode('utf-8')
salt = bcrypt.gensalt()
pass_hash = bcrypt.hashpw(password, salt)
user_data["Password"] = pass_hash
client = connect()
db = client.companydb
collection = db.Authentication
result = collection.insert_one(user_data)
print("Done!")
except Exception as e:
print("Exception:",e)
MongoDBの
> db.Authentication.find().pretty()
{
"_id" : ObjectId("5a1d9cf8e6023f20d3b11bf3"),
"Name" : "My Full Name",
"Password" : BinData(0,"JDJiJDEyJDR0RzFwRkNjaE1HdlExd0kuRXgyLk91U09yQWZYTWxZL2pZbUVod3N2NGhRR05XUXIyNDRh"),
"Username" : "ivanleoncz",
"Email" : "[email protected]",
"Sector" : "IT"
}
私は理解したいと思います:
- ハッシュされたパスワードがBSON BINDATAとして格納されているのはなぜ?
- このような状況を避けることはできますか?それが可能なら、どうですか? dictの直接X
insert_one({"Username":var_name,"Password":var_hash})
を格納:
- の間に違いはありますか?ハッシュされたパスワードがBSON BINDATAとして格納されているのはなぜ
パスワードベリファイアをバイナリ形式で保存するのが嫌なのはなぜですか? ' "$ 2B $ 12 $ 4tG1pFCchMGvQ1wI.Ex2.OuSOrAfXMlY/jYmEhwsv4hQGNWQr244a"': 'Futher "JDJiJDEyJDR0RzFwRkNjaE1HdlExd0kuRXgyLk91U09yQWZYTWxZL2pZbUVod3N2NGhRR05XUXIyNDRhは、"' Base64では、ACSIIテキストではなく、バイナリ、エンコードされたASCIIにエンコードされています。 – zaph
私は嫌いではないと私はこれを言及していない。しかし、そのような形式でパスワードハッシュを持つ必要がありますか?私はそれがパスワードのハッシュを持っているが、私はBinData形式が大丈夫である理由を理解するために開いている、例えば、です。 – ivanleoncz
あなたはこのコメントを答えに凝縮することができますか(アイデアをフォーマットする)? – ivanleoncz