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

项目简介

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

原始数据集只包含关于弱密码的信息,并没有包含强密码的数据或分类器,这意味着模型无法学习到强密码的规律!!!
我之所以这样设计这个示例,其目的是为了向你展示模型的工作原理。如果在数据集中添加一些强密码的样本和模式信息,那么机器学习算法就能完美运作,并准确预测你的密码是否足够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. 模型解释与错误分析:深入理解模型为何做出某些预测,并分析预测错误的样本,找出其中的规律和特点,据此改进模型或预处理步骤。

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

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

相关文章

python统计分析——单变量数据统计作图

参考资料:python统计分析-托马斯 1、导入库和数据准备 # 导入库 # 用于数值处理的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 用于绘图的库 import matplotlib.pyplot as plt import seaborn as sns sns.set()# 数…

安全特性 悬垂指针

英文名称 Dangling point,它还有一个兄弟叫 wild point - 野指针。 简单的对Dangling point做一个类比:我换手机号码了,但是没有通知老板,老板通讯录存的是我的旧号码。然后老板打电话有两种可能:打不通电话或者电话打…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(十五)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型,由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”(そら sora),即天空之意,以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

优化算法之最速梯度下降法、牛顿法、拟牛顿法(DFP及BFGS)

优化算法之最速梯度下降法、牛顿法、拟牛顿法 一、最速梯度下降法 我们知道常规的梯度下降法迭代法公式如下: θ ( k 1 ) θ ( k ) − η ∇ f ( θ ( k ) ) \theta^{(k1)} \theta^{(k)} - \eta\nabla f(\theta^{(k)}) θ(k1)θ(k)−η∇f(θ(k)) 迭代公式中包…

适配Ollama的前端界面Open WebUI

在前文 本地大模型运行框架Ollama 中,老苏留了个尾巴,限于篇幅只是提了一下 Open WebUI,有网友留言说自己安装没搞定,今天我们来补上 文章传送门:本地大模型运行框架Ollama 什么是 Open WebUI ? Open WebUI…

LabVIEW眼结膜微血管采集管理系统

LabVIEW眼结膜微血管采集管理系统 开发一套基于LabVIEW的全自动眼结膜微血管采集管理系统,以提高眼结膜微血管临床研究的效率。系统集成了自动化图像采集、图像质量优化和规范化数据管理等功能,有效缩短了图像采集时间,提高了图像质量&#…

运维随录实战(2)之k8s部署应用

一, 创建.gitlab-ci.yml文件 架构流程 文件内容 stages: #设置流水线模版- build # 编译- source2img- deploy # 发布variables: # 设置全局变量MAVEN_PATH: .m2MAVEM_IMAGE: maven:3.8.5-openjdk-17-slim # maven 打包使用的镜像MAVEN_CLI_OPTS: "-s $MAVEN_PATH/set…

【观点】区块链的未来:分布式商业;企业的未来:分布式商业生态战略

本文内容摘自思二勋所著的《分布式商业生态战略》一书。 近两年,商业经济环境的不确定性越来越明显,市场经济受到疫情、技术、政策等多方因素影响越来越难以预测,黑天鹅事件时有发生。在国内外经济方面,国际的地缘政治对商业经济…

基于R语言实现线性回归模型及测试应用

基于R语言实现线性回归模型及测试应用 mpgB0B1*dartE 调用R语言函数 >data(mtcars) >head(mtcars) > mod <- lm(formula mpg ~ drat, data mtcars) > summary(mod) > # 画出拟合的线 >abline(mod, col "blue") >points(mtcars$drat, mt…

【Linux命令】fuser

fuser 使用文件或文件结构识别进程。 详细 fuser命令用于报告进程使用的文件和网络套接字。fuser命令列出了本地进程的进程号&#xff0c;哪些本地进程使用file&#xff0c;参数指定的本地或远程文件。 每个进程号后面都跟随一个字母&#xff0c;该字母指示进程如何使用该文…

14-RPC-自研微服务框架

RPC RPC 框架是分布式领域核心组件&#xff0c;也是微服务的基础。 RPC &#xff08;Remote Procedure Call&#xff09;全称是远程过程调用&#xff0c;相对于本地方法调用&#xff0c;在同一内存空间可以直接通过方法栈实现调用&#xff0c;远程调用则跨了不同的服务终端&a…

智能通用平台(Intelligent General-purpose Platform)

根据2024年的最新人工智能技术发展趋势&#xff0c;我为您提出的项目需求表如下&#xff1a; 项目名称&#xff1a;智能通用平台&#xff08;Intelligent General-purpose Platform&#xff09;项目概述&#xff1a;结合最新的生成式人工智能、多模态学习和量子计算技术&#…

Redis基础---Java客户端应用

目录 一、介绍 二、Jedis的使用 三、SpringDataRedis的使用 创建&#xff1a; 一、介绍 在Redis官网&#xff0c;提供了多种编程语言的客户端&#xff0c;如Java、C等&#xff0c;官网地址&#xff1a;Clients | Redis 而对于Java的客户端有很多&#xff0c;但是用的最多的就是…

判定MySQL是否开机自启

在Linux系统中&#xff0c;判断MySQL是否设置为开机自动启动&#xff0c;可以通过以下几种方式来确认&#xff1a; 使用systemd&#xff1a; 如果你的Linux发行版使用systemd作为其初始化系统&#xff08;大多数现代Linux发行版如Ubuntu、CentOS 7&#xff09;&#xff0c;可以…

【Web前端入门学习】——HTML

目录 HTML简介HTML文件结构常用文本标签标题标签段落标签有序列表和无序列表表格标签 HTML属性a标签—超链接标签图片标签 HTML区块块元素与行内元素 HTML表单 HTML简介 HTML全称是Hypertext Markup Language超文本标记语言。 HTML的作用&#xff1a; 为网页提供结构&#xff…

自动驾驶感知面试-coding应用题

感知面试手撕代码&#xff1a;这个博主总结的很好&#xff0c;尤其是关于叉积的计算 双线性插值 双线性插值公式记忆方法和Python实现 NMS算法 #include<iostream> #include<vector> #include<algorithm>using namespace std; struct Box {int x1,x2,y1,…

【代码】Python3|无GUI环境中使用Seaborn作图的学习路线及代码(阴影折线图)

我有个需求是需要画图&#xff0c;让GPT帮我生成了一下学习计划。 学习路线依照GPT的来的&#xff0c;使用的Prompt工具是https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor。 文章目录 PrerequisiteMain Curriculum1.1 Seaborn介绍Seaborn基础保存图形为文件练习 1.2 单变量数…

什么是Vue的服务端渲染(SSR)?它有什么作用?

Vue的服务端渲染&#xff08;SSR&#xff09;是指将Vue组件在服务器端进行渲染&#xff0c;然后将已经渲染好的页面返回给浏览器&#xff0c;相比于传统的客户端渲染&#xff0c;SSR可以更好地优化SEO和加速首屏加载速度。在传统的客户端渲染中&#xff0c;浏览器需要加载所有的…

【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &#x1f680; 本…

Linux——MySQL主从复制与读写分离

实验环境 虚拟机 3台 centos7.9 网卡NAT模式 数量 1 组件包mysql-5.6.36.tar.gz cmake-2.8.6.tar.gz 设备 IP 备注 Centos01 192.168.223.123 Amoeba Centos02 192.168.223.124 Master Centos03 192.168.223.125 Slave MySQL安装 主从同时操作 安装所需要的…