昨天被一同学告知,网上的一个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. 【温故而知新】HTTP 概述

    什么是 HTTP 官方解释是 "因特网的多媒体信使",通俗点说,就是个送信的.电话机出来之前,人与人(有一定距离)之间的沟通基本靠写信,然后由快递员送发.如果把 web 服务器和客 ...

  2. Mysql单表查询(胖胖老师)

    数据准备drop table if exists class;create table class(    class_no int(2) unsigned zerofill primary key ...

  3. Spring Boot简单应用——会员管理系统

    简介 本项目是使用Spring Boot编写的一个简单的会员管理系统. 提供了会员的解决方案,主要有会员模块,管理员模块,礼品模块,商品模块,会员等级模块,生日提醒模块,积分模块,详细模块如下图 准备 ...

  4. Java爬虫原理分析

    当我们需要从网络上获取资源的时候,我们一般的做法就是通过浏览器打开某个网站,然后将我们需要的东西下载或者保存下来. 但是,当我们需要大量下载的时候,这个时候通过人工一个个的去点击下载,就显得太没有效率 ...

  5. poj 1269 线段与线段相交

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13605   Accepted: 60 ...

  6. 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)

    J. Ceizenpok’s formula time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  7. quartz问题记录-missed their scheduled fire-time

    这里有3个原因:1.所有的woker thread(工作线程; 辅助线程)都在运行其他的job2.scheduler(调度器)down了(关于这个down.我不太明确是shutdown了..还是挂掉了 ...

  8. Python中模块之xml的讲解

    xml模块的功能介绍 这里主要讲解xml模块下的etree.ElementTree类. 1. 创建 具体代码如下 import xml.etree.ElementTree as XM namelist ...

  9. PHP+JQuery+Ajax初始化网站基本信息(附源码)--PHP

    一.思路 为了保存用户会员信息的时间长一些,不局限于session的关闭.我们需要将用户信息保存在数据库中,前台每次登录都需要进行校验,来查看用看用户会员信息是否过期,如果没有过期,取出用户会员信息存 ...

  10. JS区分中英文字符的两种方法: 正则和charCodeAt()方法

    1.正则regExpForm.onblur=function(){ entryVal=this.value; entryLen=entryVal.length; cnChar=entryVal.mat ...