密码类
一、凯撒密码:
替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面的第三个字符,特殊符号不进行加密处理
对于原文中的字符P,其密文字符C满足如下条件:
凯撒密码的加密方法:C=(P+3)mod 26
凯撒密码的解密方法:P=(C-3)mod 26
加密第一种方法:
plaincode = input() for p in plaincode: if ord("a") <= ord(p) <= ord("z"): print(chr (ord("a")+(ord(p)-ord("a")+3)%26),end='') elif ord("A") <= ord(p) <= ord("Z"): print(chr (ord("A")+(ord(p)-ord("A")+3)%26),end='') else: print(p,end='')
第二种方法:
输入格式:第一行是一个字符串;第二行是一个正整数
输出格式:一个字符串,内容为用户输入字符串加密后的结果
plaincode = input() num = int(input()) ''' 原文字符P,密文字符C,偏移量num满足下列条件 C = (P + num) mod 26 P = (C - num) mod 26 ord函数:返回用来表示内存中相应字符的实际二进制值(底层整数码-ASCII字节值) chr函数:获取整数码并将其转换为对应的字符 ''' for p in plaincode: # 使用上面的方法计算 if ord("a") <= ord(p) <= ord("z"): print(chr(ord('a')+(ord(p)-ord('a')+num)%26),end='') elif ord("A") <= ord(p) <= ord("Z"): print(chr(ord('A')+(ord(p)-ord('A')+num)%26),end='') else: print(p,end="")
二、黑客语解密:将英语中的英文字母替换为数字和特殊符号
table = ' '. maketrans (before , after) :创建映射表
str1 . translate(table) : 可以将table中的字符按映射表中的顺序进行替换
替换表:0 1 3 4 5 6 7 $
o i e a s g t s
str1 = input() before = '0134567' after = 'oieasgt' table = ''.maketrans(before, after) #创建映射表 print(str1.translate(table))
三、密码强度判断:用户输入一个字符串作为密码,判断密码强度
#判断密码字符串长度是否大于8 #是否包含数字 string.digits 可返回'0123456789' #是否包含小写字母 string.ascii_lowercase 可返回'abcdefghijklmnopqrstuvwxyz' #是否包含大写字母 string.ascii_uppercase 可返回'ABCDEFGHIJKLMNOPQRSTUVWXYZ' #是否包含特殊字符 string.punctuation 可返回'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' #长度小于8弱密码,长度大于等于8且包含至少2种字符为中等强度,包含3种字符为较强,包含全部4种字符为极强。 import string pwd = input() strong = d = al = au = pu = 0 for ch in pwd: if ch in string.digits: #是否包含数字 d = 1 elif ch in string.ascii_lowercase: #是否包含小写字母 al = 1 elif ch in string.ascii_uppercase: #是否包含大写字母 au = 1 elif ch in string.punctuation: #是否包含指定的标点符号 pu = 1 if len(pwd) < 8: strong = 0 else: strong = d + al + au + pu if strong < 2: print('弱') elif strong == 2: print('中') elif strong == 3: print('强') elif strong == 4: print('极强')