# -*- 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加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作的更多相关文章

  1. 凯撒密码加密解密--JAVA实现(基础)

    凯撒密码一种代换密码,据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码.凯撒密码的基本思想是:通过把字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前) ...

  2. Python的一个解释凯撒密码的程序

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' { Title:CaserCode Author:naiquan Type:crypto Detai ...

  3. 凯撒密码移位python

    #!/usr/bin/python'''凯撒密码'''a="gmbhqwertghjkcvbzn"s=[""]*len(a)for j in range(26) ...

  4. Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密

    凯撒密码加密 题目 问题描述 给定一个单词,请使用凯撒密码将这个单词加密. 凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文.即a变为d,b变为e,-,w变为z,x ...

  5. Python凯撒密码加解密

    #凯撒密码第一个版本 #加密 pxpt=input("请输入明文文本:") for p in pxpt: if 'a'<=p<='z': print(chr(ord(' ...

  6. Python凯撒密码和括号匹配

    1.凯撒密码: 除了特殊字符不转化,其余的按照规定经行转译,以下以a~z和A~Z的字符都进行转译. plaincode = input("")print(len(plaincode ...

  7. 凯撒密码(Caesar cipher) 详解

    ------------恢复内容开始------------ 最近训练CTF的时候,发现密码学这块的知识不太系统,所以自己接下来会陆陆续续整理出来 就先从古典密码中的凯撒密码说起吧 凯撒密码内容比较简 ...

  8. java:凯撒密码及String的应用

    一,凯撒密码 古罗马皇帝凯撒在打仗时曾使用过以下方法加密军事情报 现在用java实现 程序设计思想: 1,字符串首先要转化为字符数组,才能依次加密 2,当原来的字符为X,Y,Z时,加密后要转化为A,B ...

  9. FCC JS基础算法题(13):Caesars Cipher(凯撒密码)

    题目描述: 下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码.移位密码也就是密码中的字母会按照指定的数量来做移位.一个常见的案例就是ROT13密码,字母会移位13个位置.由'A ...

随机推荐

  1. 从零开始学 Web 之 jQuery(二)获取和操作元素的属性

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  2. 数字对讲系统开发札记(前端linux c 后端 c#)

    前言 数字化是一种趋势,特别是在“提速降费”的大环境下,这种趋势愈发明显.对讲机这种古老的系统也处在时代的变革之中,虽然手机的功能越来越强,让人怀疑对讲机是否还有存在的必要.诚然,对讲机仍然有它的市场 ...

  3. Eureka单机高可用伪集群配置

    Eureka Server高可用集群理论上来讲,因为服务消费者本地缓存了服务提供者的地址,即使Eureka Server宕机,也不会影响服务之间的调用,但是一旦新服务上线,已经缓存在本地的服务提供者不 ...

  4. zabbix yum安装

    1. 安装zabbix yum源 rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/6/x86_64/zabbix-release-4.0-1.el6. ...

  5. 记录线上与本地docker镜像一致,但Dockerfile却构建失败的问题

    背景 公司新开了某个项目,我在新的服务器部署了docker环境,本着ctrl+c 和ctrl+v的惯例,直接把以前的php环境的Dockerfile文件直接复制到新项目服务器那里,结果构建失败,失败的 ...

  6. [JZOJ5987] 仙人掌毒题

    Description Solution 套路题... 全他娘的是套路... 首先如何处理仙人掌,可以在线拿 \(lct\) 维护,或者离线之后树剖.(\(lct\) 维护太毒了写不来,就离线树剖了又 ...

  7. SpringBoot之Mybatis操作中使用Redis做缓存

    上一博客学习了SpringBoot集成Redis,今天这篇博客学习下Mybatis操作中使用Redis做缓存.这里其实主要学习几个注解:@CachePut.@Cacheable.@CacheEvict ...

  8. LeetCode算法笔记目录

    贪心算法: LeetCode翻转矩阵后的得分-Python3<六> LeetCode根据身高重建队列-Python3<七> LeetCode 任务调度器-Python3< ...

  9. 将代码从 spark 1.x 移植到 spark 2.x

    1. SparkSession sparkSession可以视为sqlContext和hiveContext以及StreamingContext的结合体,这些Context的API都可以通过spark ...

  10. 【Spring】25、Spring代理。 BeanNameAutoProxyCreator 与 ProxyFactoryBean

    一般我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置文件的 ...