Python编写数据库连接工具
前段时间写过一个数据库暴力破解的工具,使用了一个28G的大字典,最后还是以失败告终。当然这个也是自己写着娱乐的。并没有发布出来。通过测试来看,破解数据库密码还是有一定难度的。但是大家千万不要使用弱密码,比如下面的几种:
纯数字模式,如123456、6666666、88888等;
纯字母模式,如aaaaa、bbbbbb、cccccc等;
单字母加数字,如a123456、a6666等常见且有规律数字;
在设计密码模式时建议大家在程序上强制要求用户满足强密码模式,可以参考以下几种:
强密码长度至少有 8 个字符
不包含全部或部分用户账户名
没有规则的大小写字母、数字、符号的组合
不是容易被猜测到的密码
下面说一下mysql连接工具的设计和实现吧!
设计
MySQL在连接时要求用户提供主机地址、端口号、数据库名、用户名、密码等条件。我们就以这些信息为模型,设计出表单和提交按钮。
我们使用python的第三方库 tkinter 来实现UI界面。最终实现效果如下:
数据库连接
我们知道程序在运行过程中出现错误会停止运行,如果我们输入了错误的密码,那么程序将自行跳出,停止运行,所以在这里我们需要使用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()