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

项目简介

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

原始数据集只包含关于弱密码的信息,并没有包含强密码的数据或分类器,这意味着模型无法学习到强密码的规律!!!
我之所以这样设计这个示例,其目的是为了向你展示模型的工作原理。如果在数据集中添加一些强密码的样本和模式信息,那么机器学习算法就能完美运作,并准确预测你的密码是否足够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,一经查实,立即删除!

相关文章

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

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

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

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

基于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,然后有离线触发 也到时间。 调整应用的电池策略 修改成“无限制”后,就不会断…

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…

力扣 第 387 场周赛 解题报告 | 珂学家 | 离散化树状数组 + 模拟场

前言 整体评价 手速场模拟场,思路和解法都蛮直接的。 所以搞点活 如果T2,如果不固定左上角,批量查询某个点为左上角,求满足总和 ≤ k \le k ≤k的子矩阵个数 如果T2,如果不固定左上角,求总和 ≤ k \le k…

Spring的Bean的生命周期 | 有图有案例

Spring的Bean的生命周期 Spring的Bean的生命周期整体过程实例化初始化服务销毁循环依赖问题 完整生命周期演示 Spring的Bean的生命周期 Spring Bean的生命周期:从Bean的实例化之后,通过反射创建出对象之后,到Bean称为一个完整的对象&#xf…

快上车:什么是人工智能?人工智能和普通程序的区别

什么是人工智能? 虽然AI历史很悠久,上个世纪50年代就有各种概念,但是发展很慢。第一次对人类的冲击就是1997年IBM深蓝击败国际象棋世界冠军,引起了人们的广泛关注,之后又销声匿迹。突然间2016人工智能alphaGO战胜了围…

具身智能计算系统,机器人时代的 Android | 新程序员

【导读】具身智能作为一种新兴的研究视角和方法论,正在刷新我们对智能本质及其发展的理解:传统的 AI 模型往往将智能视为一种独立于实体存在的抽象能力,而具身智能则主张智能是实体与其环境持续互动的结果。 本文深度剖析了具身智能计算系统…

程序员如何选择职业赛道?

一、自我评估与兴趣探索 程序员选择职业赛道时,可以考虑以下几个关键因素: 1、兴趣与热情:首先要考虑自己的兴趣和热情,选择符合个人喜好和激情的领域,能够激励自己持续学习和进步。 2、技术能力&am…

mysql5.7配置主从

原理: MySQL主从复制的工作原理如下:1. 主服务器产生Binlog日志当主服务器的数据库发生数据修改操作时,如INSERT、UPDATE、DELETE语句执行,主服务器会记录这些操作的日志信息到二进制日志文件中。2. 从服务器读取Binlog日志 从服务器会向主服务器发送请求,主服务器把…

微信小程序开发学习笔记《18》uni-app框架-网络请求与轮播图

微信小程序开发学习笔记《18》uni-app框架-网络请求 博主正在学习微信小程序开发,希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、下载网络请求包 这个包是以前黑马程序员老师写的一个包,跟着课程学习&#x…

Open3D(C++) 指定点数的体素滤波

目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法过程 对于数据量较大的点云,在后期进行配准时会影响计算效率。而体素格网…