Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作
# -*- coding: gb2312 -*-
#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作
#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
import hashlib
def md5(arg):#这是加密函数,将传进来的函数加密
md5_pwd = hashlib.md5(bytes('admin'))
md5_pwd.update(bytes(arg))
return md5_pwd.hexdigest()#返回加密的数据 def log(user,pwd):#登录时的函数,由于md5不能反解,因此登陆的时候用正解
with open('pass.txt','r') as f:
for line in f:
u,p=line.strip().split('|')
if u == user and p == md5(pwd):#登录的时候验证用户名以及加密的密码跟之前保存的是否一样
return True def register(user,pwd):#注册的时候把用户名和加密的密码写进文件,保存起来
with open('pass.txt','a') as f:
temp = user+'|'+ md5(pwd)+'\n'
f.write(temp) def encryption(): #加解密界面
offset=int(input('~~~~~~~~~~~~~~~~~~~~~~~~~~\n'
'请输入偏移量:\n'
'大于0小于26:偏移量\n'
'0:退出登录\n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~\n'))
if offset in range(1,25):
variable=int(input('~~~~~~~~~~~~~~~~~~~~~~~~~~\n'
'请选择操作:\n'
'1:加密\n'
'2:解密\n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~\n'))
user1=Caesar(offset,variable)
user1.choose()
elif offset==0:
print('谢谢使用,再见!')
exit(0)
else:
print('偏移量超出范围,请重新输入!') class Caesar: # 定义类,名叫Caesar
def __init__(self, offset, variable):# 初始化
self.passage = offset
self.type = variable def encrypt(self,offset): # 加密
move = (ord(offset)-97+self.passage) % 26+97 # 用ASCII码值来完成移动,ord()将字符转化为对应ASCII码的十进制数
return chr(move) #将ASCII码转化为对应的数值,chr()将一个整数转化为Unicode字符 def decrypt(self,offset): # 解密
move=(ord(offset)-97-self.passage)%26+97
if move < 97:
move = move + 26
return chr(move) def choose(self): # 选择
str2=''
if self.type==1: # 加密时进入
str1=input("请输入要加密的字符串('xxx'):\n")
org=str1
for i in range (len(str1)): # str1为输入的字符串
str1=str1[:i]+self.encrypt(str1[i])+str1[i+1:]
for i in range (len(str1)):
str2=str2+str1[i]
print ('字符串'+org+'加密后为:'+str2)
elif self.type==2: # 解密时进入
str1=input("请输入要解密的字符串('xxx'):\n")
org=str1
for i in range (len(str1)):
str1=str1[:i]+self.decrypt(str1[i])+str1[i+1:]
for i in range (len(str1)):
str2=str2+str1[i]
print ('字符串'+org+'解密后为:'+str2)
else:
print('选择错误,请重新输入!') class Login:
def __init__(self,i):
self.i=i def showface(self):
if self.i==2:
user = input("用户名('xxx'):")
pwd =input("密码('xxx'):")
register(user,pwd)
elif self.i==1:
count=1
while count<=3:
user = user = input("用户名('xxx'):")
pwd =input("密码('xxx'):")
r=log(user,pwd)#验证用户名和密码
if r==True:
print('登录成功')
while True:
encryption()
else:
print('登录失败')
count +=1
if count == 4:
print("密码输入次数过多,账户将被锁定!")
exit(0)
else:
print("还有%d次尝试机会!"%(4-count))
elif self.i==0:
print('谢谢使用,再见!')
exit(0)
else:
print('输入错误,请重新输入!') if __name__=='__main__': # 测试程序
while True:
i=int(input('~~~~~~~~趣味密码学~~~~~~~\n'
'0.退出\n'
'1.登录\n'
'2.注册\n'
'~~~~~~~~~~~~~~~~~~~~~~~~\n'
'请输入您的选择:'))
pass1=Login(i)
pass1.showface()
结果:
C:\Python27\python.exe D:/Mypython/Myexercise/_kaisa_passage.py
~~~~~~~~趣味密码学~~~~~~~
0.退出
1.登录
2.注册
~~~~~~~~~~~~~~~~~~~~~~~~
请输入您的选择:2
用户名('xxx'):'wrr'
密码('xxx'):''
~~~~~~~~趣味密码学~~~~~~~
0.退出
1.登录
2.注册
~~~~~~~~~~~~~~~~~~~~~~~~
请输入您的选择:2
用户名('xxx'):''
密码('xxx'):''
~~~~~~~~趣味密码学~~~~~~~
0.退出
1.登录
2.注册
~~~~~~~~~~~~~~~~~~~~~~~~
请输入您的选择:1
用户名('xxx'):''
密码('xxx'):''
登录成功
~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入偏移量:
大于0小于26:偏移量
0:退出登录
~~~~~~~~~~~~~~~~~~~~~~~~~~
3
~~~~~~~~~~~~~~~~~~~~~~~~~~
请选择操作:
1:加密
2:解密
~~~~~~~~~~~~~~~~~~~~~~~~~~
1
请输入要加密的字符串('xxx'):
'qwert'
字符串qwert加密后为:tzhuw
~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入偏移量:
大于0小于26:偏移量
0:退出登录
~~~~~~~~~~~~~~~~~~~~~~~~~~
3
~~~~~~~~~~~~~~~~~~~~~~~~~~
请选择操作:
1:加密
2:解密
~~~~~~~~~~~~~~~~~~~~~~~~~~
2
请输入要解密的字符串('xxx'):
'tzhuw'
字符串tzhuw解密后为:qwert
~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入偏移量:
大于0小于26:偏移量
0:退出登录
~~~~~~~~~~~~~~~~~~~~~~~~~~
0
谢谢使用,再见! Process finished with exit code 0
或者:
C:\Python27\python.exe D:/Mypython/Myexercise/_kaisa_passage.py
~~~~~~~~趣味密码学~~~~~~~
0.退出
1.登录
2.注册
~~~~~~~~~~~~~~~~~~~~~~~~
请输入您的选择:1
用户名('xxx'):'wrr'
密码('xxx'):''
登录成功
~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入偏移量:
大于0小于26:偏移量
0:退出登录
~~~~~~~~~~~~~~~~~~~~~~~~~~
0
谢谢使用,再见! Process finished with exit code 0
或者:
C:\Python27\python.exe D:/Mypython/Myexercise/_kaisa_passage.py
~~~~~~~~趣味密码学~~~~~~~
0.退出
1.登录
2.注册
~~~~~~~~~~~~~~~~~~~~~~~~
请输入您的选择:1
用户名('xxx'):''
密码('xxx'):''
登录失败
还有2次尝试机会!
用户名('xxx'):''
密码('xxx'):''
登录失败
还有1次尝试机会!
用户名('xxx'):''
密码('xxx'):''
登录失败
密码输入次数过多,账户将被锁定! Process finished with exit code 0
pass.txt文件保存结果如下:

Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作的更多相关文章
- 凯撒密码加密解密--JAVA实现(基础)
凯撒密码一种代换密码,据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码.凯撒密码的基本思想是:通过把字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前) ...
- Python的一个解释凯撒密码的程序
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' { Title:CaserCode Author:naiquan Type:crypto Detai ...
- 凯撒密码移位python
#!/usr/bin/python'''凯撒密码'''a="gmbhqwertghjkcvbzn"s=[""]*len(a)for j in range(26) ...
- Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
凯撒密码加密 题目 问题描述 给定一个单词,请使用凯撒密码将这个单词加密. 凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文.即a变为d,b变为e,-,w变为z,x ...
- Python凯撒密码加解密
#凯撒密码第一个版本 #加密 pxpt=input("请输入明文文本:") for p in pxpt: if 'a'<=p<='z': print(chr(ord(' ...
- Python凯撒密码和括号匹配
1.凯撒密码: 除了特殊字符不转化,其余的按照规定经行转译,以下以a~z和A~Z的字符都进行转译. plaincode = input("")print(len(plaincode ...
- 凯撒密码(Caesar cipher) 详解
------------恢复内容开始------------ 最近训练CTF的时候,发现密码学这块的知识不太系统,所以自己接下来会陆陆续续整理出来 就先从古典密码中的凯撒密码说起吧 凯撒密码内容比较简 ...
- java:凯撒密码及String的应用
一,凯撒密码 古罗马皇帝凯撒在打仗时曾使用过以下方法加密军事情报 现在用java实现 程序设计思想: 1,字符串首先要转化为字符数组,才能依次加密 2,当原来的字符为X,Y,Z时,加密后要转化为A,B ...
- FCC JS基础算法题(13):Caesars Cipher(凯撒密码)
题目描述: 下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码.移位密码也就是密码中的字母会按照指定的数量来做移位.一个常见的案例就是ROT13密码,字母会移位13个位置.由'A ...
随机推荐
- 解决Windows英文版中文软件乱码的问题
由于工作的原因,我们的开发环境都是基于英文的,但是在打开一些基于中文编码的软件的时候经常会出现乱码的情况.其实只要打开控制面板按照下面的步骤稍微设置一下,就可以完美的在英文操作系统下支持中文软件了,因 ...
- java 面试基础总结(二)---多线程
1.实现多线程的三种方法 1.继成Thread 类,覆盖run()方法即可 2.implements Runnable接口 3.implements Callale接口,执行时通过FutureTask ...
- ArrayBlockingQueue 阻塞队列 生产者 与消费者案例
package com.originalityTest; import java.net.UnknownHostException; import java.util.ArrayList; impor ...
- 学习html5的网站
http://www.html5cn.org/ http://www.html5china.com/ http://www.mhtml5.com/
- HTML5 audio元素如何使用js与jquery控制其事件
前言: 每一次遇见问题想到的就是怎么解决?最好的方法还是查询网络媒体,更好的办法是让自己记忆,只有自己理解到了才真正是属于自己.要做一个订单提醒功能,没有使用audio相关的插件,虽然插件无数,还是喜 ...
- Java设计模式学习记录-命令模式
前言 这次要介绍的是命令模式,这也是一种行为型模式.最近反正没有面试机会我就写博客呗,该投的简历都投了.然后就继续看书,其实看书也会给自己带来成就感,原来以前不明白的东西,书上已经给彻底的介绍清楚了, ...
- Vxlan学习笔记——实现
1. 创建NVI NVI(Network Virtual Instance)网络虚拟实例,是VTEP上为一个VXLAN提供L2交换服务的虚拟交换实例,NVI和VXLAN ID一一对应.别和VNI混了. ...
- Jmeter配置通过SSH连接的mysql数据库
jmeter连接配置mysql数据库时,如果数据库服务器没有通过ssh连接,则只需要添加配置相应的jdbc参数就可以了.如果数据库服务器是通过SSH连接的,则需要通过中间远程连接工具来登录,此处使用的 ...
- session持久化到sqlserver
每次想使用都会忘记单词,所幸记录下来.简单步骤记录. 第一步:找到cmd目录 输入:cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 进入该目录. 第二 ...
- 【Json】1、JSON 数据格式
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易 ...