在Python中将加密密码存储到MySQL

2 投票
2 回答
4960 浏览
提问于 2025-04-17 16:28
import sys
import hashlib
import getpass
from passlib.hash import sha256_crypt
import MySQLdb, random, os


def SQLAddPass(username, password):
    SQL = 'insert into user values ("%s", "%s")' % (username, password)

    try:
        db = MySQLdb.connect (host='localhost', user='root', db='vedio')
        c = db.cursor()
        c.execute(SQL)
        db.commit()
        c.close()
        db.close()
        raw_input('Record Added - press enter to continue: ')
    except:
        print 'There was a problem adding the record'
        raw_input ('press enter to continue')


def main(argv):


    print '\nUser & Password Storage Program v.01\n'


    username = raw_input('Please Enter a User Name: ')
    password = sha256_crypt.encrypt(getpass.getpass('Please Enter a Password: '))

    try:
        SQLAddPass(username, password)

    except:
        sys.exit('There was a problem saving Record!')

    print '\nPassword safely stored in ' + sys.argv[1] + '\n'      

if __name__ == "__main__":
    main(sys.argv[1:])

我的问题是,脚本可以运行,但出现了以下错误:

(C:\Users\Elsie\Desktop\example.py:14: 警告:第1行的'密码'列数据被截断 c.execute(SQL) 记录已添加 - 按回车继续:

密码安全地存储在数据库中。我哪里做错了?欢迎任何建议或代码修改。

2 个回答

0

可能是你的“密码”字段太短了。你需要一个长度为64的字符串类型。你的密码字段长度是多少呢?

1

数据在第1行的'密码'列被截断

这句话的意思是,你的表格里有一个密码的列,比如说这个列的长度限制是10个字符,但你却想插入一个20个字符的记录。这样的话,你插入的记录就会被截断,导致密码不完整。

解决办法是:把表格中这个列的长度增加一下。

撰写回答