基于机器学习的密码强度检测

项目简介

利用机器学习对提供的数据集预测用户输入的密码是否为弱密码。

原始数据集只包含关于弱密码的信息,并没有包含强密码的数据或分类器,这意味着模型无法学习到强密码的规律!!!
我之所以这样设计这个示例,其目的是为了向你展示模型的工作原理。如果在数据集中添加一些强密码的样本和模式信息,那么机器学习算法就能完美运作,并准确预测你的密码是否足够strong.
当然,当你的密码与弱密码数据集差异性较大时,那么也可以视为有一定强度的密码。

实现步骤

  1. 从Kaggle数据集中加载密码及其对应强度的数据;
  2. 对原始数据进行预处理,移除包含缺失密码信息的行;
  3. 将数据集划分为训练集和测试集,以验证模型性能;
  4. 使用字符级别的TF-IDF方法将密码文本转换为数值特征向量,便于机器学习模型处理;
  5. 训练随机森林分类器以预测密码强度,其中设置有100棵树,并使用固定随机种子确保结果可复现;
  6. 在测试集上应用训练好的模型进行预测并计算准确率;
  7. 接收用户输入的密码,利用已训练好的模型预测其强度,并根据预测值判断密码是强还是弱。

最终,该程序在输出模型在测试集上的准确率后,可以实时接收用户输入的密码,为其提供强度评估反馈。

代码实现

import numpy as np # 引入numpy库,用于科学计算
import pandas as pd # 引入pandas库,用于数据处理# 机器学习相关的库
from sklearn.feature_extraction.text import TfidfVectorizer # 文本特征提取
from sklearn.model_selection import train_test_split # 数据集划分
from sklearn.ensemble import RandomForestClassifier # 随机森林分类器
from sklearn.impute import SimpleImputer # 缺失值填充
from sklearn.metrics import accuracy_score # 准确率计算# 遍历kaggle输入目录下的所有文件
import os
for dirname, _, filenames in os.walk('/kaggle/input'):for filename in filenames:print(os.path.join(dirname, filename))

读取密码数据集,并使用朴素贝叶斯模型来评估密码强度:

# 加载密码数据集
data = pd.read_csv("/kaggle/input/passwords/passwords.csv")# 移除包含缺失值的行
data = data.dropna(subset=["password"])# 准备特征和目标变量
X = data["password"]
y = data["strength"]# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 使用简单插值器处理缺失值
imputer = SimpleImputer(strategy="constant", fill_value="")  
X_train = imputer.fit_transform(X_train.values.reshape(-1, 1)).ravel()
X_test = imputer.transform(X_test.values.reshape(-1, 1)).ravel()# 使用TF-IDF进行特征向量化
vectorizer = TfidfVectorizer(analyzer="char")
X_train_tfidf = vectorizer.fit_transform(X_train)
X_test_tfidf = vectorizer.transform(X_test)# 训练随机森林分类器
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train_tfidf, y_train)# 在测试集上进行预测并计算准确率
predictions = model.predict(X_test_tfidf)
accuracy = accuracy_score(y_test, predictions)
print("Accuracy:", accuracy)# 接收用户输入并预测密码强度
password_to_check = input("Enter a password: ")
password_vector = vectorizer.transform([password_to_check])
prediction = model.predict(password_vector)[0]
print(prediction)
if prediction > 4 :print("Strong password.")
else:print("Weak password.")

步骤包括:

  1. 加载密码数据集;
  2. 清洗数据,去除包含缺失值的行;
  3. 将数据集划分为训练集和测试集;
  4. 使用字符级别的TF-IDF向量化密码文本;
  5. 训练随机森林分类器以评估密码强度;
  6. 对测试集进行预测并计算准确率;
  7. 接收用户输入的密码,并使用模型预测其强度。

不返回任何值,但会打印出密码强度的评估结果。

运行测试

在这里插入图片描述
在这里插入图片描述

优化方向

当然可以从以下方面尝试提高模型准确率:

  1. 数据增强:可以尝试生成更多的训练样本(例如通过密码的组合、变异规则等)来增加模型对各种复杂情况的学习能力。
  2. 特征工程:优化字符级别的TF-IDF向量化过程,比如考虑不同的n-gram范围,或者引入其他有助于区分密码强度的特征。
  3. 尝试更换其他类型的分类器,如SVM、XGBoost、LightGBM或深度学习模型,比较不同模型在该问题上的表现。
  4. 对当前使用的随机森林模型进行参数调优,使用GridSearchCV或RandomizedSearchCV搜索最佳的超参数组合,如树的数量(n_estimators)、最大深度(max_depth)、最小叶子节点样本数(min_samples_leaf)等。
  5. 集成学习:除了单一模型外,还可以尝试使用集成方法,例如结合多个模型的预测结果,进一步提升性能。
  6. 处理不平衡类别:如果训练集中强密码和弱密码的比例严重失衡,需要采取过采样、欠采样或其他平衡策略来处理类别不平衡问题。
  7. 评估指标:根据实际需求选择合适的评估指标,例如对于这种二分类问题,精确率、召回率以及F1值可能更有意义,而不是仅仅依赖于整体的准确率。
  8. 模型解释与错误分析:深入理解模型为何做出某些预测,并分析预测错误的样本,找出其中的规律和特点,据此改进模型或预处理步骤。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python65-Python的循环之for表达式

for表达式用于利用其他区间、元组、列表等可迭代对象创建新的列表。for 表达式的语法格式如下: [表达式 for 循环计数器 in 可迭代对象] 从上面的语法格式可以看出,for表达式与普通for循环的区别 1)在for关键字之前定义一个表达式,该表达式通常会包含循环计数器 2)for …

@RestController和@Controller的区别

RestController和Controller是Spring框架中两个常用的注解,用于标识Controller类 1.Controller:使用Controller注解标记的类是一个典型的MVC控制器(controller),用于处理请求并返回视图。通常在该类的方法上使用Reque…

alzet供应商你值得拥有

在20世纪70年代,ALZE公司研发出来一款巧妙的药物输送装置——Alzet osmotic pump。这款产品如胶囊般精致小巧,它既有胶囊的外表,也具有胶囊的作用。在Alzet osmotic pump中藏有可以装配药物溶液的空间。此款胶囊泵如同一个小投递员&#xff0…

Vue整合three.js 环境从头搭建 详细教程

目录 一、创建Vue项目 二、搭建three.js 三、引入扩展库OrbitControls 首先我们要有nodejs环境,这里我们用的是17.1.0版本。 一、创建Vue项目 第一步:终端命令创建vue项目 npm create vite@latest

AI蠕虫病毒威胁升级,揭示AI安全新危机

一组研究人员成功研发出首个能够通过电子邮件客户端窃取数据、传播恶意软件以及向他人发送垃圾邮件的AI蠕虫,并在使用流行的大规模语言模型(LLMs)的测试环境中展示了其按设计功能运作的能力。基于他们的研究成果,研究人员向生成式…

用pyinstaller打包python代码为exe可执行文件并在其他电脑运行的方法

本文介绍基于Python语言中的pyinstaller模块,将写好的.py格式的Python代码及其所用到的所有第三方库打包,生成.exe格式的可执行文件,从而方便地在其他环境、其他电脑中直接执行这一可执行文件的方法。 有时,我们希望将自己电脑上的…

python笔记:super(),__getitem()__,__call()__

目录 Q1:super(NetworkBlock, self).__init__()什么意思 Q2:__call__() 类的实例圆括号自动调用 Q3:__getitem__() 类的实例 方括号自动调用 Q4:没有双下划线方法时,普通的调用类的方法 总结 Q1:super…

Python 全栈系列230 轻全局函数服务 GFGoLite

说明 为了将GlobalFunc推向正常的应用轨道,构造一个功能简单的服务。 内容 1 工作模式 Server模式:以API服务方式执行 Worker模式: 以Worker方式执行。通过left/right文件夹和rsync方式执行任务并写结果。 2 构造方法 重载和执行;从标…

基于springboot的助农管理系统的设计与实现

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一 、设计说明 1.1研究背…

【网站项目】219一中体育馆管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

pywin32,一个超强的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个超强的 Python 库 - pywin32。 Github地址:https://github.com/mhammond/pywin32 在Python的世界里,有许多优秀的第三方库可以帮助开发者更轻松地处理各种任务。其中&a…

【性能】后台与黑屏

目录 现象观察 调整应用的电池策略 现象观察 切换到后台, 一个心跳期间,就会发close socket 直接黑屏,没有收到任何消息,直接到onclose,然后有离线触发 也到时间。 调整应用的电池策略 修改成“无限制”后,就不会断…

C#面:简单介绍 序列化 和 反序列化

序列化: 是将对象转换为可保持或可传输的形式的过程。 .NET 具有以下序列化技术: 二进制序列化保持类型保真,这对于多次调用应用程序时保持对象状态非常有用。 例如,通过将对象序列化到剪贴板,可在不同的应用程序之…

Linxu自动化构建工具make/Makefile究竟时什么?

Linxu自动化构建工具make/Makefile究竟时什么? 一、简介二、makefile文件制作(简洁版)2.1 源文件2.2 makefile如何制作2.2.1 依赖关系、依赖方法2.2.3 伪目标(清理文件资源) 三、make/Makefile自动化原理3.1 伪目标为什…

SpringBoot+Vue实现el-table表头筛选排序(附源码)

👨‍💻作者简介:在笑大学牲 🎟️个人主页:无所谓^_^ ps:点赞是免费的,却可以让写博客的作者开心好几天😎 前言 后台系统对table组件的需求是最常见的,不过element-ui的el…

Grpc项目集成到java方式调用实践

背景:由于项目要对接到grcp 的框架,然后需要对接老外的东西,还有签名和证书刚开始没有接触其实有点懵逼。 gRPC 是由 Google 开发的高性能、开源的远程过程调用(RPC)框架。它建立在 HTTP/2 协议之上,使用 …

D7805 正电压稳压电路应用——体积小,成本低,性能好

D7805 构成的 5V 稳压电源为输出电压5V,输出电流 1000mA 的稳压电源它由滤波电容 C1,C3,防止自激电容 C2、C3 和一只固定三端稳压器(7805)后级加 LC 滤波极为简洁方便地搭成,输入直流电压范围为 7~35V,此直流电压经过D…

yolov8-更换卷积模块-ContextGuidedBlock_Down

源码解读 class ContextGuidedBlock_Down(nn.Module):"""the size of feature map divided 2, (H,W,C)---->(H/2, W/2, 2C)"""def __init__(self, nIn, dilation_rate2, reduction16):"""args:nIn: the channel of input fea…

Hack The Box-Bizness

目录 信息收集 nmap dirsearch WEB Get shell 提权 get user flag get root flag 信息收集 nmap 端口扫描┌──(root㉿ru)-[~/kali/hackthebox] └─# nmap -p- 10.10.11.252 --min-rate 10000 -oA port Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-04 1…

实测VLLM的加速效果

为了测试vllm的并行加速效果,采用同样的5个提问,编写两个不同的python脚本,分别是compare_vllm.py和compare_chatglm3.py,其中compare_vllm.py采用vllm加速。 服务器参数: 操作系统ubuntu 22.04CPUi7 14700k内存dd5 …