专栏首页小白程序猿Python编写数据库连接工具

Python编写数据库连接工具

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

  1. 纯数字模式,如123456、6666666、88888等;
  2. 纯字母模式,如aaaaa、bbbbbb、cccccc等;
  3. 单字母加数字,如a123456、a6666等常见且有规律数字;

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

  1. 强密码长度至少有 8 个字符
  2. 不包含全部或部分用户账户名
  3. 没有规则的大小写字母、数字、符号的组合
  4. 不是容易被猜测到的密码

下面说一下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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python暴力破解Mysql数据

    今天来分享python学习的一个小例子,使用python暴力破解mysql数据库,实现方式是通过UI类库tkinter实现可视化面板效果,在面板中输入数据库连接...

    小白程序猿
  • thinkphp5使用PHPMailer发送邮件

    PHPMailer是一个用于发送电子邮件的PHP函数包。直接用PHP就可以发送,无需搭建复杂的Email服务。今天来说一下如何在thinkphp框架中使用此扩展...

    小白程序猿
  • 开发准备 - 工程师规范

    小白程序猿
  • 如何写出好的 JavaScript —— 浅谈 API 设计

    很多同学觉得写 JavaScript 很简单,只要能写出功能来,效果能实现就好。还有一些培训机构,专门教人写各种“炫酷特效”,以此让许多人觉得这些培训很“牛逼”...

    前朝楚水
  • 变量类型-Tuple

    教程: 一:元组的创建     元组(tuple)与列表类似,不同之处在于元组的元素不能修改     (1)tuple写在圆括号之间,元素用逗号隔开    ...

    py3study
  • dotnet 新 sdk style 项目格式的一些命名空间和引用

    在使用 sdk style 的 csproj 项目格式,会发现右击引用找不到程序集,此时有一些命名空间没有找到。本文收集一些命名空间所在的引用

    林德熙
  • 随笔——关于网站建设

    FHYC
  • Python暴力破解Mysql数据

    今天来分享python学习的一个小例子,使用python暴力破解mysql数据库,实现方式是通过UI类库tkinter实现可视化面板效果,在面板中输入数据库连接...

    小白程序猿
  • Python的元组学习(五)

    本节来学习python的元组,在python语言中,元组的关键字是tuple同时元组是不可变的,列表与字典是可变的,元组的定义是一个(),下面通过代码...

    无涯WuYa
  • Python元组与列表的相同点与区别

    列表和元组都属于有序序列,支持使用双向索引访问其中的元素、使用内置函数len()统计元素个数、使用运算符in测试是否包含某个元素、使用count()方法统计指定...

    Python小屋屋主

扫码关注云+社区

领取腾讯云代金券