密码学实践-04

密码强度

你要揭榜的任务非常简单,内容如下。

用户输入口令后,请进行强度检测

等级三种:强,中,弱

1、口令长度小于等于8位,并且纯小写英文或大写英文,弱

2、口令长度小于等于8位,并且有小写、大写英文和非英文字符,中

3、口令长度大于8位,并且纯小写英文或大写英文,中

4、口令长度大于8位且小于等于16位,并且有小写英文、大写英文、非英文字符中的两种,中

5、口令长度大于16位,并且有小写英文、大写英文、非英文字符中的两种,强

6、口令长度大于16位,并且有小写英文、大写英文、非英文字符中的三种,强

python代码实现,上传jupyter文件和运行截图!

奖励:

1、平时成绩+5分;

2、“CPPU数安雇佣兵团”加入条件之一,需要完美做完5个任务

(置换加密练习、代换密码练习挑战任务也计入5个任务之一)

# 用户输入口令
password = input("请输入您的口令:")

# 判断口令强度
def check_password_strength(password):
    if len(password) <= 8 and (password.islower() or password.isupper()):
        return "弱"
    elif len(password) <= 8 and (any(c.islower() for c in password) and any(c.isupper() for c in password) and not password.isalpha()):
        return "中"
    elif len(password) > 8 and (password.islower() or password.isupper()):
        return "中"
    elif 8 < len(password) <= 16 and ((any(c.islower() for c in password) and any(c.isupper() for c in password) and not password.isalpha()) or (not password.isalpha() and not password.isnumeric())):
        return "中"
    elif len(password) > 16 and ((any(c.islower() for c in password) and any(c.isupper() for c in password) and not password.isalpha()) or (not password.isalpha() and not password.isnumeric())) and any(not c.isalnum() for c in password):
        return "强"
    elif len(password) > 16 and any(c.islower() for c in password) and any(c.isupper() for c in password) and any(not c.isalnum() for c in password):
        return "强"
    else:
        return "弱"

# 输出口令强度
print("您输入的口令强度为:", check_password_strength(password))

对文件名进行识别并分类

你要揭榜的任务非常比较简单:

1、找一堆文件,比如1000个,要求对文件名进行识别并分类:公开类、内部、涉密类。

识别规则请自己定义,Python代码实现。

2、找一个文件excel或者csv,里边的数据有很多行很多列,要求对数据列的列名(即属性)进行识别并分级:1级、2级、3级、4级...等。

识别规则请自己定义,Python代码实现。

3、敏感数据识别:识别规则请自己定义,Python代码实现。

 
    

文件分类任务

对于文件名的分类,我将使用正则表达式进行识别。假设公开类的文件名public_ 开头,内部的文件名以 internal_ 开头,涉密类的文件名以 confidencial_ 开头。

  • re.IGNORECASE 是一个标志(flag),用于指示在正则表达式匹配过程中忽略大小写。当您使用这个标志时,正则表达式将被视为不区分大小写的,因此它可以匹配任何大小写组合的文本。
  • os.listdir()是一个Python函数,它返回指定路径下的所有文件和子目录的名称列表。如果您没有提供任何参数,则默认将当前工作目录用作路径。
  • 我们将 encoding 参数设置为 'gbk',表示以该字符编码格式读取文件。这可以帮助 Python 正确处理文本文件中的 Unicode 字符。

例如,在以下示例代码中,我们列出了当前工作目录中的所有文件:

#文件分类
import os
import re

path = 'path/to/files'# 这里需要填写您存储文件的路径
public_regex = re.compile(r'^public_', re.IGNORECASE)
internal_regex = re.compile(r'^internal_', re.IGNORECASE)
confidential_regex = re.compile(r'^confidential_', re.IGNORECASE)

for filename in os.listdir(path):
    if public_regex.search(filename):
        # 分类为公开类print(f"Filename '{filename}' is classified as public.")
    elif internal_regex.search(filename):
        # 分类为内部类print(f"Filename '{filename}' is classified as internal.")
    elif confidential_regex.search(filename):
        # 分类为涉密类print(f"Filename '{filename}' is classified as confidential.")
    else:
        # 没有匹配到任何规则print(f"Cannot classify filename '{filename}'.")

在这个脚本中,我们首先指定了文件路径并定义了三个正则表达式模式,用于匹配公开类、内部类和涉密类文件的文件名。然后,我们遍历了给定路径下的所有文件,并使用 search() 函数来检查文件名是否符合任何一个模式。

运行脚本后,它会打印每个文件名的分类结果。

2.数据列属性分类任务

对于数据列的列名识别和分类,我将使用 Pandas 库进行处理。假设属性名中包含根据敏感程度标记的字符串元素并使用方括号括起来。例如: [1]Name 表示一级属性 "Name"。下面是相应的 Python 代码:

import pandas as pd



df = pd.read_csv(path,encoding=gbk)
with open('example.txt', 'r', encoding='gbk') as f:
    data = f.read()



level_regexes = [re.compile(f'^\[{level}\].+$', re.IGNORECASE) for level inrange(1, 5)]

for col in df.columns:
    for i, pattern inenumerate(level_regexes):
        if pattern.match(col):
            print(f"Column '{col}' is classified as level {i + 1}.")
            breakelse:
        # 如果没有匹配到任何规则print(f"Cannot classify column '{col}'.")

此脚本会读取给定路径中的数据文件,并遍历所有列名以查找包含不同等级标记的列名。我们使用一个包含四个正则表达式模式的列表,分别用于匹配四个不同级别的列名。每当找到一个匹配项时,我们就输出其对应的级别。

运行脚本后,它将逐个打印所有列名及其分类结果。如果无法与任何模式匹配,则会打印分类错误消息。

3.敏感数据识别任务

对于敏感数据的识别,规则可以根据应用情况和具体需求进行定义。以下是一些常见的规则:、

  • 身份证号码 - 包含 18 个数字的字符串。
  • 银行卡号码 - 包含 16 到 19 个数字的字符串。
  • 手机号码 - 包含 11 个数字的字符串。
  • 邮箱地址 - 包含 "@" 字符,后跟域名。

我们可以使用正则表达式来识别这些敏感信息。下面是一个示例脚本,演示如何查找文本文件中的银行卡号码:

import re

# 打开文件并读入文本内容
with open('data.txt', 'r') as f:
    contents = f.read()

# 定义一些敏感数据的规则(示例)
patterns = [
    r'\b(身份证|银行卡号)\b([^\d]*\d{4}\s?){3}',  # 身份证或银行卡号
    r'\b(手机号|电话号码)\b\s*\+?\d+(\s|\-|\.)?\d+',  # 手机号或电话号码
    r'([\w\.\-\+]+@[a-zA-Z\d\-]+\.[a-zA-Z]{2,}(?:\.[a-zA-Z]{2})?)'  # 邮箱地址
]

# 检查文本内容中是否包含敏感数据
sensitive_data = []

for pattern in patterns:
    matches = re.findall(pattern, contents, flags=re.IGNORECASE)
    if len(matches) > 0:
        sensitive_data.extend(matches)

if len(sensitive_data) > 0:
    print('敏感数据如下:')
    for data in sensitive_data:
        print('- ' + data)
else:
    print('未发现敏感数据')




xx
import re

path = 'path/to/textfile'# 这里需要填写您存储文本文件的路径
card_regex = re.compile(r'\b[0-9]{16,19}\b')

withopen(path, 'r') as file:
    data = file.read()

matches = card_regex.findall(data)
formatchin matches:
    print(f"Found bank card number: {match}.")

在此脚本中,我们使用类似于之前的模式匹配,并使用 findall() 函数来遍历给定文本中的所有可能的匹配项。如果找到任何匹配项,则将其打印出来。

请注意,针对其他类型的敏感信息,您可能需要编写不同的正则表达式模式,并根据需要修改代码。

隐私huan

什么是隐私獾?

隐私獾是一个浏览器扩展程序,它可以阻止广告商和其他第三方跟踪器秘密跟踪您去哪里,以及您在网上看什么网页。 如果一个广告商似乎在未经您允许的情况下在多个网站上跟踪您,隐私獾会自动阻止该广告商在您的浏览器中加载更多内容。 对广告商来说,您就像突然消失了一样。

你可能感兴趣的:(python,数据安全)