检测密码安全强度 和 凯撒加密

检测密码安全强度

按照含有数字,小写字母,大写字母,指定标点符号的种类,把安全强度分为强密码,中高,中低,弱密码.
编写程序,输入一个字符串,输出该字符串作为密码时的安全强度

from string import digits, ascii_lowercase, ascii_uppercase


def 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] * 4
    for 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 string


def kaisa(s, k):
    lower = string.ascii_lowercase
    upper = string.ascii_uppercase
    before = string.ascii_letters
    after = 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))

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值