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

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


上图

  • 口令正确

  • 口令错误

代码

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

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

# coding:utf-8
import sys

reload(sys)
sys.setdefaultencoding('utf8')
#    __author__ = '郭 璞'
#    __date__ = '2016/9/13'
#    __Desc__ = 根据月份生成不同的密码
from hashlib import md5
from 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-8
import sys

reload(sys)
sys.setdefaultencoding('utf8')

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

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

  • 终端乱码

  • tkinter界面乱码



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

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

http://blog.csdn.net/marksinoberg/article/details/52254401

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
  • 时间日期的使用

Python+Tkinter 密保小工具的更多相关文章

  1. python tkinter模块小工具界面

    代码 #-*-coding:utf-8-*- import os from tkinter import * root=Tk() root.title('小工具') #清空文本框内容 def clea ...

  2. Python趣味实用小工具

    代码地址如下:http://www.demodashi.com/demo/12918.html python 趣味实用小工具 概述 用python实现的三个趣味实用小工具: 图片转Execl工具 , ...

  3. python提效小工具-统计xmind用例数量

    问题:做测试的朋友们经常会用到xmind这个工具来梳理测试点或写测试用例,但是xmind8没有自带的统计测试用例,其他版本的xmind有些自带节点数量统计功能,但也也不会累计最终的数量,导致统计测试工 ...

  4. 几个可以提高工作效率的Python内置小工具

    在这篇文章里,我们将会介绍4个Python解释器自身提供的小工具.这些小工具在笔者的日常工作中经常用到,减少了各种时间的浪费,然而,却很容易被大家忽略.每当有新来的同事看到我这么使用时,都忍不住感叹, ...

  5. 纯Python综合图像处理小工具(3)10种滤镜算法

    <背景>  滤镜处理是图像处理中一种非常常见的方法.比如photoshop中的滤镜效果,除了自带的滤镜,还扩展了很多第三方的滤镜效果插件,可以对图像做丰富多样的变换:很多手机app实现了实 ...

  6. 纯Python综合图像处理小工具(1)分通道直方图

    平时工作经常需要做些图像分析,需要给图像分通道,计算各个通道的直方图分布特点,这个事儿photoshop也能做,但是用起来不方便,且需要电脑上安装有PS软件,如果用OpenCV, 更是需要在visua ...

  7. python: 实现sha1小工具

    File1: sha1.py File2: sha1.bat ------------------ File1: sha1.py import hashlib import os,sys def Ca ...

  8. 纯Python综合图像处理小工具(4)自定义像素级处理(剪纸滤镜)

      上一节介绍了python PIL库自带的10种滤镜处理,现成的库函数虽然用起来方便,但是对于图像处理的各种实际需求,还需要开发者开发自定义的滤镜算法.本文将给大家介绍如何使用PIL对图像进行自定义 ...

  9. python内置小工具

    python -m http.server # 启动一个下载服务器 echo '{"job": "developer", "job": &q ...

随机推荐

  1. ASP.NET Core + Docker +Jenkins 实现持续集成

    1.新建一个ASP.NET Core MVC应用程序: 2.将其上传到git: 3.建立Jenkins任务 (1)选择"新建任务",输入任务名称,选择"自由风格项目&qu ...

  2. java制作验证码(java验证码小程序)

    手动制作java的验证码 Web应用验证码的组成: (1)输入框 (2)显示验证码的图片 验证码的制作流程: 生成验证码的容器使用 j2ee的servlet 生成图片需要的类: (1) Buffere ...

  3. Java集合详解二

    前一篇我们已经讲过了Collectin是存放单值的最大接口, 可以看到Map接口和其主要之类的关系图如下: 快速访问 HashMap    HashTable  TreeMap  Map输出 那Map ...

  4. POJ 1486二分图的必要边

    题意:有n个大小不等透明的幻灯片(只有轮廓和上面的数字可见)A.B.C.D.E…按顺序叠放在一起,现在知道每个幻灯片大小,由于幻灯片是透明的,所以能看到幻灯片上的数字(给出了每个数字的坐标,但不知道这 ...

  5. 2015 多校联赛 ——HDU5350(huffman)

    Problem Description MZL is a mysterious mathematician, and he proposed a mysterious function at his ...

  6. bzoj1010[HNOI2008]玩具装箱toy 斜率优化dp

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 11893  Solved: 5061[Submit][S ...

  7. oracle 分页查询数据重复问题

    最近在做项目的时候发现一个问题,oracle 在查询分页数据的时候,有几条数据重复查询了,并且有几条数据在分页的时候消失了.百度了一下发现,ORACLE 在查询数据的时候返回的行不是固定的,他只是按照 ...

  8. Spring 自带的定时任务Scheduled

    1.注解@Scheduled 可以作为一个触发源添加到一个方法中,例如,以下的方法将以一个固定延迟时间5秒钟调用一次执行,这个周期是以上一个调用任务的完成时间为基准,在上一个任务完成之后,5s后再次执 ...

  9. C++是跨平台的语言

    最开始学习Java时,老师就说Java是跨平台的,而c++不是,这里要纠正一下观点,c++也是跨平台的,只不过是实现跨平台的方式不同而已. 1.平台 一般我们把CPU处理器与操作系统的整体叫平台.不同 ...

  10. 求n的阶乘

    import java.util.Scanner; public class J {  public static void main(String args[])  {   //注释:int n=6 ...