Python编写数据库连接工具

发布时间:2020-04-09 21:56:13 浏览量:1242 标签: Python 数据库

前段时间写过一个数据库暴力破解的工具,使用了一个28G的大字典,最后还是以失败告终。当然这个也是自己写着娱乐的。并没有发布出来。通过测试来看,破解数据库密码还是有一定难度的。但是大家千万不要使用弱密码,比如下面的几种:

  1. 纯数字模式,如123456、6666666、88888等;

  2. 纯字母模式,如aaaaa、bbbbbb、cccccc等;

  3. 单字母加数字,如a123456、a6666等常见且有规律数字;

在设计密码模式时建议大家在程序上强制要求用户满足强密码模式,可以参考以下几种:

  1. 强密码长度至少有 8 个字符

  2. 不包含全部或部分用户账户名

  3. 没有规则的大小写字母、数字、符号的组合

  4. 不是容易被猜测到的密码

下面说一下mysql连接工具的设计和实现吧!

设计

MySQL在连接时要求用户提供主机地址、端口号、数据库名、用户名、密码等条件。我们就以这些信息为模型,设计出表单和提交按钮。

我们使用python的第三方库 tkinter 来实现UI界面。最终实现效果如下:

QQ截图20200409212959.png

数据库连接

我们知道程序在运行过程中出现错误会停止运行,如果我们输入了错误的密码,那么程序将自行跳出,停止运行,所以在这里我们需要使用try-except来执行代码。

try:
except:

这种模式在执行代码时会执行try下的代码,如果代码出现异常则执行except下的代码,跳出try模式。如果没有异常则会直接忽略掉except下的代码,继续向下执行。

想学习python的同学,可以看一看下面的这本书,目前我这里有这本书的电子版,可以联系我获取。

代码

通过UI界面获取到我们输入的数据库配置信息,在后台对数据进行校验。将校验结果返回至前台,这里我使用的是tkinter中的 messagebox 进行弹窗提示,代码如下。

tkinter.messagebox.showinfo('提示信息', '请输入完整数据')

程序打包

目前已经将程序使用pyinstaller进行打包,有需要的可以找我。

代码

# -*-coding:UTF-8 -*-
import tkinter
import tkinter.messagebox
import pymysql
import time

win = tkinter.Tk()

# 设置标题
win.title('Mysql测试连接')
# 设置位置和大小
win.geometry("400x400+704+304")
# 描述性文字
tkinter.Label(win, text='主机地址', font=('Helvetica Neue', 12)).place(x=10, y=10)
tkinter.Label(win, text='端口号', font=('Helvetica Neue', 12)).place(x=10, y=50)
tkinter.Label(win, text='数据库', font=('Helvetica Neue', 12)).place(x=10, y=90)
tkinter.Label(win, text='用户名', font=('Helvetica Neue', 12)).place(x=10, y=130)
tkinter.Label(win, text='密码', font=('Helvetica Neue', 12)).place(x=10, y=170)
# 主机
host_default = tkinter.StringVar()
host_default.set('127.0.0.1')
host = tkinter.Entry(win, textvariable=host_default, font=('Helvetica Neue', 14))
host.place(x=120, y=10)
# 端口号
port_default = tkinter.StringVar()
port_default.set('3306')
port = tkinter.Entry(win, textvariable=port_default, font=('Helvetica Neue', 14))
port.place(x=120, y=50)
# 数据库名
database_default = tkinter.StringVar()
# database_default.set()
database = tkinter.Entry(win, textvariable=database_default, font=('Helvetica Neue', 14))
database.place(x=120, y=90)
# 用户名
name_default = tkinter.StringVar()
# name_default.set()
name = tkinter.Entry(win, textvariable=name_default, font=('Helvetica Neue', 14))
name.place(x=120, y=130)

# 密码
password_default = tkinter.StringVar()
# password_default.set()
password = tkinter.Entry(win, textvariable=password_default, font=('Helvetica Neue', 14))
password.place(x=120, y=170)


# 计算及下一步操作
def button_call_back():
    # 获取输入框内的数据
    host = host_default.get()
    port = port_default.get()
    database = database_default.get()
    name = name_default.get()
    password = password_default.get()

    if (host and port) and (database and name):
        # 破解
        res = find_pass(host, port, database, name, password)
        if res:
            tkinter.messagebox.showinfo('提示信息', '连接成功')
        else:
            tkinter.messagebox.showinfo('提示信息', '连接失败')
    else:
        tkinter.messagebox.showinfo('提示信息', '请输入完整数据')


# 数据库连接测试
def find_pass(host, port, database, name, password):
    try:
        con = pymysql.connect(
            # 数据库地址
            host='%s' % host,
            # 端口
            port=int(port),
            # 用户名
            user='%s' % name,
            # 密码
            password='%s' % password,
            # 数据库名称
            database='%s' % database,
            # 编码设置
            charset='utf8'
        )
        con.close()
        return password  # 连接成功返回 密码
    except:
        return False


# 按钮
submit = tkinter.Button(win, text="开始", bg="#005ca9", fg="#FFF", width=20, height=1, command=button_call_back)
submit.place(x=130, y=300)

# 进入消息循环
win.mainloop()



评论
登录后才可以进行评论哦! QQ登录
验证码
评论内容