【问题标题】:How to create SQL queries using an SHA-1 digest of a string using Python如何使用 Python 使用字符串的 SHA-1 摘要创建 SQL 查询
【发布时间】:2012-06-01 08:01:35
【问题描述】:

我正在尝试将数百个帐户插入MySQL 数据库。我无法插入明文密码,并且我的应用程序需要 SHA-1 密码哈希。快速在线搜索将我指向Python's hashlib libray。

这是我生成 SHA-1 哈希的 Python 代码:

import hashlib
m = hashlib.sha1();
m.update("kpVtk5y6");
m.digest();

如何在 SQL 查询中使用 m.digest 来存储密码?

我的 Web 应用程序使用 Java 的 MessageDigest.digest(mypassword.getBytes()) 方法来存储密码,所以我需要在 Python 中实现类似的东西来自动注入用户帐户。

【问题讨论】:

  • 不使用 m.digest(),你能用 m.hexdigest() 代替吗?这样,您使用的是 ASCII 字符串而不是二进制。
  • 实际上,我不必使用 ASCII 字符串,并且密码字段定义为 byte[] 而不是字符串。 python 是否有 byte[] 等价物? Java 的 MessageDigest.digest() 返回一个 byte[],而我在 python 中正是需要它。

标签: java python mysql sql sha1


【解决方案1】:

在 Python 中,您不需要在行尾添加分号。

根据https://stackoverflow.com/a/5241478/181772 你所说的你正在做的应该工作。例如:

conn = MySQLdb.connect(host='localhost')
r = conn.cursor()
r.execute('INSERT INTO users (hash) VALUES (%s)', m.digest())
conn.commit()

因为m.digest() 返回一个str,这是Python 2 的字节等价物。上面的链接显示这些可以插入到 MySQL 数据库中。

因此,如果您已经这样做了,那听起来您的代码中有错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    相关资源
    最近更新 更多