博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python+Tkinter 密保小工具
阅读量:7097 次
发布时间:2019-06-28

本文共 2805 字,大约阅读时间需要 9 分钟。

昨天被一同学告知,网上的一个QQ密码库中有我的一条记录,当时我就震惊了,赶紧换了密码。当然了,这件事也给了我一个警示,那就是定期的更换自己的QQ密码,会比较的安全。

然后就自己写了个密码保护的小工具。虽然我们没有必要写这么个程序,但是为了复习巩固一下之前学过的知识,还是做点什么吧。


上图

  • 口令正确

口令正确

  • 口令错误

口令错误

代码

本实验是基于Python来实现,使用Tkinter来写的界面。

以当前月份为算子来获取md5加密后的随机字符串来作为密码。

# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')#    __author__ = '郭 璞'#    __date__ = '2016/9/13'#    __Desc__ = 根据月份生成不同的密码from hashlib import md5from time import *from Tkinter import *# 获取当前月 月份def getMonth():    month_ = localtime().tm_mon    return month_# 根据口令来返回密码或者错误信息def generatepassword(password):    print password    if password == "芝麻开门":        full =  md5(str(getMonth())).hexdigest()        month = getMonth()        return str('QQ密码:').encode('gbk')+str(full[month:month+10])    else:        return "╭(╯^╰)╮,不给密码".encode('gbk')# 此函数的神奇之处就在于能够实时的更新密码结果区域的内容def updatestate(pswd,kouling):    result = generatepassword(kouling)    print result.decode('gbk')    print "-----------------------"    pswd.set(result.decode('gbk'))# 界面形式来展示def showresult():    tk = Tk()    # 记录用户输入信息    kouling = StringVar()    # 记录密码信息    pswd = StringVar()    pswd.set('密码待显区')    frame1 = Frame(tk)    Label(frame1, text='输入口令').pack(side=LEFT, expand=YES)    Entry(frame1, textvariable=kouling).pack()    frame1.pack(side=TOP)    frame2 = Frame(tk)    Label(frame2, text='本次密码').pack(side=LEFT, expand=YES)    Entry(frame2, textvariable=pswd,state='readonly').pack()    frame2.pack(side=TOP)    frame3 = Frame(tk)    btn_pull = Button(frame3, text='获取密码', command=lambda: updatestate(pswd,kouling.get()))    # btn_pull.bind(citycode.get(),update_weather)    btn_pull.pack(side=LEFT, expand=YES)    btn_quit = Button(frame3, text='退出', command=tk.quit).pack(side=LEFT, expand=YES)    frame3.pack(side=TOP)    tk.mainloop()if __name__ == '__main__':    showresult()

核心

编,解码方面

相信大家也都看到了,代码部分多了许多的encode和decode的部分。这是因为,我们要想在终端界面上显示信息的话,需要对编码进行处理。

终端编码

而我们的Python代码中有这样的一句话。

# coding:utf-8import sysreload(sys)sys.setdefaultencoding('utf8')

其作用就是告诉解释器要以UTF-8的形式保存和读取源文件。

如果不这样做的话,我们就会出现下面这种乱码的情况。

  • 终端乱码

终端乱码

  • tkinter界面乱码

tkinter乱码

所以为了避免出现乱码的情况,我们需要告诉电脑要怎么做即可。

更多关于编码,乱码的信息,不妨看下博主之前总结的一篇文章。

Tkinter界面更新

虽然Tkinter作为一套界面开发套件很不错,但是事件处理方面和swing或者mfc,C#有一定的差别的。 比方说,我们不能再一个方法内激活本方法,否则将导致递归异常,无法实现界面的更新。

由于本例需要用户输入来决定输出,所以肯定需要动态的修改界面信息的。因此博主采用了在外边重新定义一个新函数的方式来实现。

def updatestate(pswd,kouling):    result = generatepassword(kouling)    print result.decode('gbk')    print "-----------------------"    pswd.set(result.decode('gbk'))

这样,我们在Tkinter的button点击事件中就可以做到根据用户输入来决定输出了。

frame3 = Frame(tk)    # 此处为点击事件核心    btn_pull = Button(frame3, text='获取密码', command=lambda: updatestate(pswd,kouling.get()))    btn_pull.pack(side=LEFT, expand=YES)    btn_quit = Button(frame3, text='退出', command=tk.quit).pack(side=LEFT, expand=YES)    frame3.pack(side=TOP)

总结

回顾一下,本实验所得。

  • 复习了使用Tkinter写界面的“套路”
  • 加密算法md5
  • 时间日期的使用
你可能感兴趣的文章
java获取程序执行时间
查看>>
rsync定时同步配置
查看>>
关于数据存储类型的一点分析
查看>>
Java关键字
查看>>
SharePoint 2013 工作流设计之Designer 使用“可视化视图
查看>>
eclipse连hadoop2.x运行wordcount 转载
查看>>
HTML5:Details元素
查看>>
WEB前端底层知识之浏览器是如何工作的(2)--渲染引擎 BY: linFen
查看>>
ActionBar的简单应用
查看>>
IE11下不能引入外部css的解决方法
查看>>
java web 答辩总结
查看>>
BZOJ 1432: [ZJOI2009]Function(新生必做的水题)
查看>>
GUI测试含义
查看>>
javabean使用技巧
查看>>
JS/JQ综合总结
查看>>
CGAffineTransform相关函数
查看>>
字符编码与字符集区别与联系(网页/PHP文件/MYSQL数据库乱码问题)
查看>>
黑马程序员-----const和readonly的区别
查看>>
转载:基于MapXtreme的鹰眼功能
查看>>
黄聪:远程序桌面登录的.NET(C#)开发
查看>>