我目前有一个flask应用程序,可以向mysql数据库注册用户名和密码。我的问题是 Bcrypt
为了散列密码并将其保存到数据库中,输出的散列会被mysql截断。我的函数如下所示:
class PasswordResource(Resource):
@app.route('/password', methods=['GET'])
@jwt_required
def sendPassword():
data = get_jwt_identity()
hashed_password = bcrypt.hashpw(data['user_password'].encode('utf8'), bcrypt.gensalt())
print(hashed_password)
return mysqldb.addPassword("{}".format(str(data['user_name'])),"{}".format(hashed_password))
并连接到数据库:
def addPassword(Username,Userpassword):
try:
cursorObject = connection.cursor()
cursorObject.execute("call sp_createPassword('{}'".format(Username)+",'{}')".format(Userpassword))
connection.commit()
connection.close()
finally:
return 'User added succesfully!'
然而,哈希被mysql截断了,尽管我尝试了各种方法 VARCHAR()
密码表。这是我在控制台中遇到的一个错误 Warning: (1265, u"Data truncated for column 'p_password' at row 1") self._do_get_result()
. “我的密码”列当前配置为 VARCHAR(255), Not Null
. 如何修复此错误并避免哈希被截断?
更新
这将是我的密码表的架构:
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tbl_passwords | CREATE TABLE `tbl_passwords` (
`user_name` varchar(255) DEFAULT NULL,
`user_password` varchar(255) NOT NULL,
`user_number` bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`user_number`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1条答案
按热度按时间r6l8ljro1#
我的问题在我的程序中
sp_createpassword()
添加了密码。在这个过程中,我为password
待处理参数VARCHAR(20)
显然还不够做杂烩。愚蠢的错误。不过,塔德曼的建议对建立一个合适的数据库还是很有帮助的。