fix密码哈希在导入mysql表时被截断

byqmnocz  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(322)

我目前有一个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 |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
r6l8ljro

r6l8ljro1#

我的问题在我的程序中 sp_createpassword() 添加了密码。在这个过程中,我为 password 待处理参数 VARCHAR(20) 显然还不够做杂烩。愚蠢的错误。不过,塔德曼的建议对建立一个合适的数据库还是很有帮助的。

相关问题