7.6 密码设置与安全性分析(project)(安全意识)

目录

 

第1关 随机生成一个n位密码

第2关 将随机生成的n位密码MD5加密

第3关 生成黑客密码字典

第4关 模拟碰撞破解MD5密码

第5关 检查密码是否泄漏


第1关 随机生成一个n位密码

本关任务:编写一个能随机生成一个n位密码的小程序。

1pass01.txt 1pass02.txt 1pass03.txt

Linux密码中支持的特殊字符有:" ~ @#^*%/.+:;=";windows密码中支持的特殊字符有:" ~ @/+:"; 本关要求从“十进制数字+小写大写字母+windows密码中支持的特殊字符”中随机取m个不重复的字符拼接为一个表示字符串做为密码,m是用户输入的整数,同时也用整数m做随机数的种子。

import string
import random


def generate_password(n: int) -> str:
    """接受一下整数,产生一个n位的密码,返回字符串
    windows密码中支持的特殊字符有:"~@_/+:"
    Linux密码中支持的特殊字符有:"~@#_^*%/.+:;="
    """
    # 补充你的代码
    content = string.digits + string.ascii_letters +"~ @/+:" #4SZ1qXQv h  4SZ1qtQv/h
    result = ''.join(random.sample(content, n))
    return result

if __name__ == '__main__':
    m = int(input())
    random.seed(m)
    print(generate_password(m))

第2关 将随机生成的n位密码MD5加密

本关任务:编写一个将随机生成的n位密码MD5加密的小程序。

相关知识

为了完成本关任务,你需要掌握:

1.hashlib包 2.hashlib.md5()

import string
import random
import hashlib

def generate_password(n: int) -> str:
    """接受一下整数,产生一个n位的密码,返回字符串
    windows密码中支持的特殊字符有:"~@_/+:"
    Linux密码中支持的特殊字符有:"~@#_^*%/.+:;="
    """
    # 补充你的代码
    content = string.digits + string.ascii_letters +"~ @/+:" #4SZ1qXQv h  4SZ1qtQv/h
    result = ''.join(random.sample(content, n))
    return result

def make_md5(password: str) -> str:
    """接收一个字符串,用md5加密后转为16进制,返回加密后的字符串"""
    # 补充你的代码
    pass_byte = bytes(password, 'utf-8')
    pass_md5 = hashlib.md5(pass_byte).hexdigest() 
    return pass_md5 


if __name__ == '__main__':
    m = int(input())
    random.seed(m)
    password_str = generate_password(m)
    password_str_md5 = make_md5(password_str)
    # 补充你的代码,输出预期结果
    print(f'产生的密码是:{password_str},MD5加密结果为{password_str_md5}')

第3关 生成黑客密码字典

本关任务:编写一个能生成黑客密码字典的小程序。

import string
import hashlib


def generate_password(n: int) -> str:
    """接受一下整数,产生一个n位的密码,返回字符串
    windows密码中支持的特殊字符有:"~@_/+:"
    Linux密码中支持的特殊字符有:"~@#_^*%/.+:;="
    """
    # 补充你的代码
    content = string.digits + string.ascii_letters +"~ @/+:" #4SZ1qXQv h  4SZ1qtQv/h
    result = ''.join(random.sample(content, n))
    return result


def make_md5(password: str) -> str:
    """接收一个字符串,用md5加密后转为16进制,返回加密后的字符串"""
    # 补充你的代码
    pass_byte = bytes(password, 'utf-8')
    pass_md5 = hashlib.md5(pass_byte).hexdigest() 
    return pass_md5 


def generate_pass_dic(file: str) -> dict:
    """接收文件名,以其md5加密结果为键、用文件中的密码为值构建字典,返回字典"""
    # 补充你的代码
    dic = {}
    with open(file) as f:
        content = f.readlines()
    for x in content: # 遍历文件对象
        x = x.strip()
        y =   make_md5(x)
        dic.update({x: y})
    return dic

def output(pass_dic: dict, n: int) -> None:
    """接收密码字典和整数n,按加入顺序输出前n项,无返回值"""
    # 补充你的代码
    dic1 = list(pass_dic.items())
    #print(dic1)
    for i in range(n):
        print(f'密文{dic1[i][1]}对应明文密码为{dic1[i][0]}') 


if __name__ == '__main__':
    m = int(input())
    filename = '/data/bigfiles/1pass00.txt'
    password_dic_md5 = generate_pass_dic(filename)
    output(password_dic_md5, m)

第4关 模拟碰撞破解MD5密码

本关任务:编写一个能生成黑客密码字典的小程序。

因为MD5密码不可逆,不可通过程序解密明文,所以遇到MD5加密的密码时,可行的方法将其MD5加密后的密码与黑客字典中的密文比对,若相同,则字典中的密文对应的字符串就是密码明文。

import hashlib


def make_md5(password: str) -> str:
    """接收一个字符串,用md5加密后转为16进制,返回加密后的字符串"""
    # 补充你的代码
    pass_byte = bytes(password, 'utf-8')
    pass_md5 = hashlib.md5(pass_byte).hexdigest() 
    return pass_md5 


def generate_pass_dic(file: str) -> dict:
    """接收文件名,以其md5加密结果为键、用文件中的密码为值构建字典,返回字典"""
    # 补充你的代码
    dic = {}
    with open(file) as f:
        content = f.readlines()
    for x in content: # 遍历文件对象
        x = x.strip()
        y =   make_md5(x)
        dic.update({x: y})
    return dic


def crack_password(pass_dic: dict, pass_str: str) -> str:
    """接收密码字典和整数n,按加入顺序输出前n项,无返回值"""
    # 补充你的代码
    dic1 = list(pass_dic.items())
    for i in dic1:
        if pass_str ==i[1]:
            return i[0]
   
    
if __name__ == '__main__':
    password_str = input()
    filename = '/data/bigfiles/1pass00.txt'
    password_dic_md5 = generate_pass_dic(filename)
    password = crack_password(password_dic_md5, password_str)
    if password:
        print(f'密文{password_str}的明文是{password}')
    else:
        print(f'密文{password_str}的明文未能破解')

第5关 检查密码是否泄漏

本关任务:编写一个能检查密码是否泄漏的小程序。

本关要求根据文件“1pass00.txt”“1pass01.txt”“1pass02.txt”“1pass03.txt”是泄漏在网络上的用户密码明文,生成一个黑客字典。将文件中的密码明文用MD5加密,用密文做键,明文为值构建字典。用户输入一个明文密码字符串,检查黑客字典中是否存在以确定密码是否被泄漏。

import hashlib


def make_md5(password: str) -> str:
    """接收一个字符串,用md5加密后转为16进制,返回加密后的字符串"""
    # 补充你的代码
    pass_byte = bytes(password, 'utf-8')
    pass_md5 = hashlib.md5(pass_byte).hexdigest() 
    return pass_md5 
    


def generate_pass_dic(file: str) -> dict:
    """接收文件名,以其md5加密结果为键、用文件中的密码为值构建字典,返回字典"""
    # 补充你的代码
    dic = {}
    with open(file) as f:
        content = f.readlines()
    for x in content: # 遍历文件对象
        x = x.strip()
        y =   make_md5(x)
        dic.update({x: y})
    return dic


def read_txt() -> dict:
    """无参数,读取多个文件,将其中的密码用md5加密后存于字典"""
    path = '/data/bigfiles/'
    file_ls = ['1pass00.txt', '1pass01.txt', '1pass02.txt', '1pass03.txt']
    # 补充你的代码
    for i in file_ls:
        position = path + "/"+ i 
        return generate_pass_dic(position)


def check_pass(leaked_pass_dic:dict, pass_str_md5: str):
    """检查用户的密码是否在泄漏密码库中存在,存在时返回明文,不存在时返回None"""
    # 补充你的代码
    #print(leaked_pass_dic)
    for i in leaked_pass_dic:
        if password_str == i:
            return password_str
    return False

if __name__ == '__main__':
    password_str = input()
    password_str_md5 = make_md5(password_str)
    leaked_pass_dict = read_txt()
    result = check_pass(leaked_pass_dict, password_str_md5)
    if result:
        print(f'你的密码是{result},你的密码在泄漏密码字典中')
    else:
        print('你的密码安全')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/16623.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简单分享微信小程序上的招聘链接怎么做

招聘小程序的主要用户就是企业招聘端和找工作人员的用户端,下面从这两个端来对招聘小程序开发的功能进行介绍。 企业端功能 1、岗位发布:企业根据自身岗位需求,在招聘app上发布招聘岗位及所需技能。 2.简历筛选:根据求职者提交的简历选择合适的简历,并对公开发布的简历进行筛…

【五一创作】【Simulink】采用延时补偿的三相并网逆变器FCS-MPC

👉 【Simulink】基于FCS-MPC的三相并网逆变器控制 上一篇博客介绍了FCS-MPC的基本操作,并且以三相并网逆变器为控制对象进行了Simulink仿真。 但实际仿真中没有考虑补偿延时。本篇博客将讨论为什么要考虑延时并进行补偿,最后对此仿真验证。 …

【Java数据结构】顺序表、队列、栈、链表、哈希表

顺序表 定义 存放数据使用数组但是可以编写一些额外的操作来强化为线性表&#xff0c;底层依然采用顺序存储实现的线性表&#xff0c;称为顺序表 代码实现 创建类型 先定义一个新的类型 public class ArrayList<E> {int capacity 10; //顺序表的最大容量int size …

【Java笔试强训 6】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;不要二 …

基于微信小程序的垃圾分类系统的研究与实现(附源码和教程)

1. 简介 本文介绍的事基于微信小程序的垃圾分类系统&#xff0c;主要实现的功能有登录、注册、垃圾分类查询、垃圾预约回收、垃圾分类功能。 2.系统设计与实现 本章节是论文的重点&#xff0c;基于上一章介绍的总体设计框架的搭建&#xff0c;详细对小程序的页面布局、流程设…

Photoshop如何使用选区之实例演示?

文章目录 0.引言1.利用快速选择工具抠图2.制作网店产品优惠券3.利用选区改变眼睛颜色4.抠取复杂的花束5.制作丁达尔光照效果6.利用选区调整图像局部颜色 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对PS进行了学习&#xff0c;本文通过《Photoshop2021入门教程》及…

MySQL基础

目标&#xff1a; 掌握MySQL的安装&#xff0c;登录&#xff0c;基础操作 掌握DDL语句 掌握DML语句 掌握DQL语句 1、数据库相关概念 以前我们做系统&#xff0c;数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果&#xff0c;当然文件存储…

Mysql为json字段创建索引的两种方式

目录 一、前言二、通过虚拟列添加索引&#xff08;Secondary Indexes and Generated Columns&#xff09;三、多值索引&#xff08;Using multi-valued Indexes&#xff09;四、官网地址 一、前言 JSON 数据类型是在mysql5.7版本后新增的&#xff0c;同 TEXT&#xff0c;BLOB …

【社区图书馆】二、LED子系统——硬件驱动层

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;嵌入式领域新星创作者 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录 1、gpio_led_probe分析1.1 相关数据结构1.1.1 gpio_led_platform_data1.1.2 gpio_leds_priv 1.2 实…

【论文代码阅读】LORA: LOW-RANK ADAPTATION OF LARGE LAN- GUAGE MODELS

最近很多工作好像都绕不开lora&#xff0c;无论是sd还是llm.... 1. 背景 问题&#xff1a;大模型重新训练所有模型参数的完全微调变得不太可行。lora在做什么 我们提出了低秩自适应&#xff0c;即LoRA&#xff0c;它冻结预先训练的模型权重&#xff0c;并将可训练的秩分解矩…

【Redis—哨兵机制】

概念 当进行主从复制时&#xff0c;如果主节点挂掉了&#xff0c;那么没有主节点来服务客户端的写操作请求了&#xff0c;也没有主节点给从节点进行数据同步了。此时需要进行主从切换&#xff08;主从节点故障转移&#xff09;&#xff0c;Redis在 2.8 版本以后提供的哨兵&…

C++标准库 --- 动态内存 (Primer C++ 第五版 · 阅读笔记)

C标准库 --动态内存 (Primer C 第五版 阅读笔记&#xff09; 第12章 动态内存------(持续更新)12.1、动态内存与智能指针12.1.1、shared_ptr类12.1.2、直接管理内存12.1.3、shared_ptr和new结合使用12.1.4、智能指针和异常12.1.5、unique_ptr12.1.6、weak_ptr 12.2、动态数组1…

抓马,互联网惊现AI鬼城:上万个AI发帖聊天,互相嗨聊,人类被禁言

近日又有一个社区迷惑走红 上万个AI发帖聊天&#xff0c;人类不得入内&#xff1f; 据红星新闻报道 近日&#xff0c;一个名为Chirper的AI网络社区突然爆火 上万个AI聊天机器人在其中 激烈地聊天、互动、分享 社区主页右上角明确写着&#xff1a; “这是一个人工智能的社交…

【五一创作】( 字符串) 409. 最长回文串 ——【Leetcode每日一题】

❓ 409. 最长回文串 难度&#xff1a;简单 给定一个包含大写字母和小写字母的字符串 s &#xff0c;返回 通过这些字母构造成的 最长的回文串 。 在构造过程中&#xff0c;请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。 示例 1: 输入:s “abccccdd”…

蒙蒂霍尔悖论

贝叶斯与频率主义对蒙蒂霍尔问题的解 在定义概率时&#xff0c;通常有两种思想流派&#xff1a;贝叶斯主义和频率主义。前者将概率视为我们对事件发生的信念程度&#xff0c;而后者则将其视为事件发生的相对频率。这篇文章介绍了使用贝叶斯和频率主义方法来解决著名的蒙蒂霍尔问…

IDEA Java 第一个mybatis入门程序

文章目录 准备mysql 开始新建maven项目maven添加引用mybatis配置文件工具类创建实例类添加mappermappermapper.xml 测试类 发现问题org.apache.ibatis.binding.BindingException: Type interface com.cpyy.mapper.UserMapper is not known to the MapperRegistry.The error may…

chatGPT国内可用镜像源地址

chatGPT国内可用镜像源地址 彷丶徨丶 关注 IP属地: 湖北 0.811 2023.03.15 16:02:16 字数 1,152 阅读 249,582 如果你正在尝试访问Chatgpt网站&#xff0c;但由于某些原因无法访问该网站&#xff0c;那么你可以尝试使用Chatgpt的国内镜像网站。以下是一些Chatgpt国内镜像网站的…

【MYSQL】数据类型和约束

目录 数据类型 1.数值类型 1.1.位--类型bit(M) 1.2. 整数类型--tinyint&#xff0c;smallint&#xff0c;int&#xff0c;bigint 1.3.小数类型--float、decimal 2.字符类型--char、varchar 3.日期类型--datetime、timestamp 4.string类型--enum和set mysql的约束 1.空…

【人工智能】— 不确定性、先验概率/后验概率、概率密度、贝叶斯法则、朴素贝叶斯 、最大似然估计

【人工智能】— 不确定性 不确定性不确定性与理性决策基本概率符号先验概率(无条件概率)/后验概率(条件概率)随机变量概率密度联合概率分布公理完全联合分布概率演算独立性 贝叶斯法则例1例2 使用贝叶斯规则&#xff1a;合并证据朴素贝叶斯最大似然估计小结 不确定性 不确定性与…

PCIe物理层详细总结-PCIE专题知识(一)

目录 一、简介二、PCIe物理层结构及功能2.1 PCIe端对端连接方式2.2 PCIe组成2.2.1 逻辑层(Logic)1 发送逻辑2 接收逻辑 2.2.2 电气层(Electrical)1 物理层-电气(Physical Layer Electrical)2 数据传送----差分方式 2.2.3 PLP介绍 三、其他相关链接1、PCI总线及发展历程总结2、P…
最新文章