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 ...
随机推荐
- PHP常用的正则表达式(有些需要调整)
平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: "^\d+$" //非负整数(正整数 + 0) 顺平注: 验证输入id数值,不能为0 $reg1='/ ...
- 史上最详细nodejs版本管理器nvm的安装与使用(附注意事项和优化方案)
使用场景 在Node版本快速更新迭代的今天,新老项目使用的node版本号可能已经不相同了,node版本更新越来越快,项目越做越多,node切换版本号的需求越来越迫切,传统卸载一个版本在安装另一个版本的 ...
- JavaWeb学习 (十)————Cookie
一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...
- Xshell6设置字体大小
Xshell可以远程连接到linux服务器,但有时终端字体太小,可以按照如下步骤修改字体大小: 菜单栏: 文件-属性-外观,修改字体大小后点击确定即可(也可以使用ALT+P快捷键打开属性).
- Linux卸载搭建环境
本章内容 卸载Apache PHP MySQL 卸载Apache 查看apache安装版本 $ apachectl -v 查看安装httpd相关软件包(红色部分) sudo yum list inst ...
- 浅谈c#的三个高级参数ref out 和Params
c#的三个高级参数ref out 和Params 前言:在我们学习c#基础的时候,我们会学习到c#的三个高级的参数,分别是out .ref 和Params,在这里我们来分别的讲解一下,在这里的我们先不 ...
- js 去掉缓存的几种方式
1.在Ajax发送请求前加上 anyAjaxObj.setRequestHeader ("If-Modified-Since","0") 2.在Ajax发送请求 ...
- JAVA中的集合容器操作类
目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...
- elasticsearch6.7 05. Document APIs(5)Delete By Query API
4.Delete By Query API _delete_by_query API可以删除某个匹配条件的文档: POST twitter/_delete_by_query { "query ...
- WindowsPhone8.1 开发技巧
1.调用系统内置滤镜: Windows.ApplicationModel.CameraApplicationManager.ShowInstalledApplicationsUI(); 2.完全退出应 ...