gpt4 book ai didi

python - MySQL存储随机数据(直接在表中)

转载 作者:行者123 更新时间:2023-11-29 06:30:39 30 4
gpt4 key购买 nike

在 Python 脚本中,我使用由来自 os.urandom 的数据组成的盐生成 scrypt 哈希,我想将它们保存在 MySQL 表中。如果我尝试使用我见过的用于在数据库中有效存储散列的标准方法,使用 CHAR 列,我会得到“不正确的字符串值:”散列和盐的错误。我能够找到的唯一允许随机数据的数据类型是 blob,但由于 blob 存储在表之外,因此它们存在明显的效率问题。

执行此操作的正确方法是什么?在将数据插入数据库之前,我是否应该对数据做些什么以使其被 CHAR 接受?是否有另一种 MySQL 数据类型更适合这个?

编辑:

有人要代码,所以,当我这样做的时候:

salt = os.urandom(255)
hash = scrypt.hash(password,salt,1<<15,8,1,255)
cursor.execute("INSERT INTO users (email,hash,salt) values (%s,%s,%s)", [email,hash,salt])

当我尝试插入这些值时,MySQL 给出了“不正确的字符串值”错误。

编辑 2:

根据 Joran 的要求,这里是不喜欢这样的架构:

CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(254) NOT NULL DEFAULT '',
`hash` char(255) NOT NULL,
`salt` char(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

最佳答案

你的散列是一个二进制值,如果它被解释为一个字符串,很可能会包含“不可打印的字符”。要存储任意二进制数据,请使用 the BINARY or VARBINARY数据类型。

如果必须使用字符串数据类型,可以使用base64 encoding将任意数据转换为 ASCII 字符串。

关于python - MySQL存储随机数据(直接在表中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28117247/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com