检测密码安全强度
按照含有数字,小写字母,大写字母,指定标点符号的种类,把安全强度分为强密码,中高,中低,弱密码.
编写程序,输入一个字符串,输出该字符串作为密码时的安全强度
from string import digits, ascii_lowercase, ascii_uppercasedef check(pwd):# 密码必须至少包含6个字符if not isinstance(pwd, str) or len(pwd) < 6:return 'not suitable for password'# 密码强度等级与包含字符种类的对应关系d = {1: 'weak',2: 'below middle',3: 'above middle',4: 'strong'}# 数字, 小写字母, 大写字母和指定的标点符号r = [False] * 4for ch in pwd:# 是否包含数字if not r[0] and ch in digits:r[0] = True# 是否包含小写字母elif not r[1] and ch in ascii_lowercase:r[1] = True# 是否包含大写字母elif not r[2] and ch in ascii_uppercase:r[2] = True# 是否包含指定的标点符号elif not r[3] and ch in ',.!;?<>':r[3] = True# 统计包含的字符种类,返回密码强度return d.get(r.count(True), 'error')
凯撒加密
把字符串中每个英文字母替换成该字母在字母表中后面第k个字母,如果后面k个字符超过字母表的范围,则把字母表首尾相接,也就是字母Z的下一个字母是A,字母z下一个字母是a.
要求大写字母加密后仍为大写字母,小写字母加密后仍为小写字母.
编写程序,输入一个字符串作为待加密的明文,然后输入一个整数作为凯撒加密的密钥,最后输出该字符串使用该密钥加密后的结果
import stringdef kaisa(s, k):lower = string.ascii_lowercaseupper = string.ascii_uppercasebefore = string.ascii_lettersafter = lower[k:] + lower[:k] + upper[k:] + upper[:k]table = ''.maketrans(before, after)return s.translate(table)s = input('请输入一个字符串:')
k = int(input('请输入一个整数秘钥:'))
print(kaisa(s, k))
- 字符串对象的maketrans()方法用来生成字符映射表.若输入2个参数,则二者必须为长度相等且一一对应的字符串,该方法输出一个字典, 其中 第一个参数 中每个字符将被映射为 第二个参数 中相同位置的字符
- 而translate()方法用来根据映射表中定义的对应关系转换字符串并替换其中的字符
- 可以使用这两个方法的组合同时处理多个字符
x = 'ac'
y = 'hi'
print(''.maketrans(x, y))
这些数字是字母对应的Unicode 码位序号
table = ''.maketrans('ac', 'hi')
s = 'abcdaecf'
print(s.translate(table))