C#做一个密码管理器

开源密码管理器 Bitwarden 一站式管理所有密码以及 2FA 随着注册的平台越来越多,管理密码的难度也越来越高了。要是把密码都设置成一样的,担心哪天某个平台泄露被一锅端,而每个平台单独一个密码又不太好记,这时候就需要密码管理器上场了。一般接触的最多的应该是浏览器自带的密码管理器,以 Chrome 为例,同步密码需要特殊的网络环境,并且这些密码明文的存储在设备上,安全性并不是很高,最关键的是浏览器的密码管理器只能在网页上填充,各类软件、APP 中就无能为力了。那么如何选择合适的密码管理器呢? 阅读详情

各种网站各种账号密码太多,记不清楚,原来用个Word文档把一个个账号密码给写下来,麻烦的很,今天就写了个密码管理器。密码管理器只是用来保存一些无关紧要的账号密码(其实就是当做练习C#写的一个DEMO而已,共学习交流用),并不安全,慎用啊!

截图如下:


相关知识点:
1. C#操作SQLite。
首先,安装SQL ADO.NET(下载地址:http://sourceforge.net/projects/sqlite-dotnet2/ 或者 http://www.sqlite.org/download.html),安装好后到安装目录的bin目录下找到System.Data.SQLite.dll。然后,在项目中添加引用即可。接下来就是对SQLite数据库的操作了。相关代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.IO;
using System.Windows.Forms;

namespace PwdManager
{
    class DBManager
    {
        private static string connStr = "./pwdmanager.db";
        //创建数据库
        public static void CreateDB()
        {
            SQLiteConnection.CreateFile("./pwdmanager.db");
        }

        public static string getConnStr()
        {
            if (!File.Exists("./pwdmanager.db"))
            {
                CreateDB();
                initDB();
            }
            SQLiteConnectionStringBuilder connstr = new SQLiteConnectionStringBuilder();
            connstr.DataSource = connStr;
            return connstr.ToString();
        }

        //数据库初始化
        public static bool initDB()
        {
            ExecuteSql("create table user(username varchar(20) primary key, password varchar(20));");
            ExecuteSql("create table records(name varchar(20) primary key, username varchar(100), account varchar(100), userpassword varchar(100), webaddr varchar(100), picpath varchar(100));");
            if (ExecuteSql("insert into user values('qian_f', 'qian_f');") != 1)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        //执行Sql语句
        private static int ExecuteSql(string sqlStr)
        {
            using (SQLiteConnection conn = new SQLiteConnection(getConnStr()))
            {
                try
                {
                    conn.Open();
                    SQLiteCommand comm = conn.CreateCommand();
                    comm.CommandText = sqlStr;
                    comm.CommandType = System.Data.CommandType.Text;
                    return comm.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                    return -1;
                }
            }
        }

        //sql查询语句
        private static SQLiteDataReader ExecQuery(string queryStr)
        {
            using (SQLiteConnection conn = new SQLiteConnection(getConnStr()))
            {
                conn.Open();
                SQLiteCommand comm = conn.CreateCommand();
                comm.CommandText = queryStr;
                comm.CommandType = System.Data.CommandType.Text;
                return comm.ExecuteReader();
            }
        }

        //插入记录
        public static bool InsetRecord(string name, string username, string account, string password, string webaddr)
        {
            string str = "insert into records values('" + name + "', '" + username + "', '" + account + "', '" + password + "', '" + webaddr + "', '');";
            if (ExecuteSql(str) != 1)
            {
                MessageBox.Show("添加记录失败!");
                return false;
            }
            else return true;
        }

        //删除记录
        public static bool DelRecord(string name)
        {
            string str = "delete from records where name = '" + name + "';";
            if (ExecuteSql(str) != 1)
            {
                MessageBox.Show("删除记录失败!");
                return true;
            }
            else
            {
                return false;
            }
        }

        //修改记录
        public static bool UpdateRecord(string name, string username, string account, string password, string webaddr)
        {
            string str = "update records set username='" + username + "', account='" + account + "', userpassword='" + password + "', webaddr='" + webaddr + "' where name='" + name + "';";
            if (ExecuteSql(str) != 1)
            {
                MessageBox.Show("修改记录失败!");
                return false;
            }
            else return true;        
        }
    
        //校验登录用户和密码
        public static bool CheckLogin(string name, string password)
        {
            using (SQLiteConnection conn = new SQLiteConnection(getConnStr()))
            {
                conn.Open();
                string query = "select password from user where username='" + name + "';";
                SQLiteCommand comm = conn.CreateCommand();
                comm.CommandText = query;
                comm.CommandType = System.Data.CommandType.Text;
                SQLiteDataReader reader = comm.ExecuteReader();
                if (reader.HasRows == false)
                {
                    return false;
                }
                reader.Read();
                if (reader[0].ToString().Equals(password))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
    }
}
2. C#中的剪贴板操作
该项目中的剪贴板操作比较简单,仅仅是把字符串写入到剪贴板中。更详细的剪贴板操作可查看MSDN( http://msdn.microsoft.com/zh-cn/library/system.windows.forms.clipboard.aspx)。相关代码如下:
//...
using System.Data.SQLite;

namespace PwdManager
{
    public partial class Form1 : Form
    {
        //...
        private void Btn_CopyAccount_Click(object sender, EventArgs e)
        {
            if (dataGridView1.RowCount == 0)
            {
                MessageBox.Show("当前没有记录!");
                return;
            }
            string account = dataGridView1.CurrentRow.Cells[2].Value.ToString();
            Clipboard.SetDataObject(account, true);
            SetMessage("账号已经复制到剪贴板中!");
        }
        //...
    }
}

3. C#中使用默认浏览器打开网址

System.Diagnostics.Process.Start("www.youkuaiyun.com");
4. 两个Form之间信息的传输
主要是通过设置从属窗口来实现,例如在Form1对象中要新建InfoForm对象时,通过form2.Owner = this设置InfoForm对象属于Form1对象,这样在类InfoForm中的函数就可以通过this.Owner来调用Form1的public函数。相关代码如下:
//...
namespace PwdManager
{
    public partial class Form1 : Form
    {
        //...
        //设置label字符串
        public void SetMessage(string msg)
        {
            this.label_msg.Text = msg;
        }

        //添加记录
        private void Btn_AddRecord_Click(object sender, EventArgs e)
        {
            InfoForm form2 = new InfoForm(true);
            form2.Owner = this;
            form2.ShowDialog();
            this.LoadData();
        }
        //...
    }
}
//...
namespace PwdManager
{
    public partial class InfoForm : Form
    {
        //...
        private void btn_confirm_Click(object sender, EventArgs e)
        {
            //...
            if (this.isAdd == true)
            {
                DBManager.InsetRecord(name, username, account, password, webaddr);
                Form1 form = (Form1)this.Owner;
                form.SetMessage("记录添加成功!");
            }
            //....
        }
        //...
    }
}

项目下载地址:http://yun.baidu.com/share/link?shareid=4261103166&uk=3508115909




C#随机密码生成算法实现及源码解析 这里的BatchGenerateRandomPassword方法接收两个参数,分别是生成的随机密码数量和每个密码的长度,然后通过循环调用GenerateRandomString方法生成一批随机密码,并将它们添加到List集合中返回。这个方法可以接收一个参数length,表示需要生成的随机密码长度,然后通过StringBuilder和Random类生成一个包含大小写字母和数字以及特殊字符的随机字符串。在Main方法中,我们设置需要生成10个长度为8位的随机密码,并将它们输出到控制台。 阅读详情

相关推荐

c#密码管理(源码)

vs2008平台下编写,运用了C#语言用于个人密码管理,数据用xml存储

C#操作数据库基础实例《密码管理工具》

近来接触到C#语言,感觉到很强大,参照浪曦密码管理和北风网的家庭理财案例,写了一个最为基础的C#操作数据库实例,做了详细的注释作为备忘,也供初哥参考,高手就莫看了。 先贴界面: 主窗体源代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.D

※学习笔记※ 1248

C# 密码生成工具源代码

基于C#语言的密码生成工具,可下载自行修改。开发环境Visual Studio 2017. .net framework 4.5

C#-用Winform制作一个简单的密码管理工具

为什么要做? 首先是为了练习一下c#。 想必大家都有过记不起某个平台的账号密码的经历,那种感受着实令人抓狂。那这么多账号密码根本记不住!我之前用python写过一个超级简单(连账号信息都写在代码里那种)的控制台程序用来给我提示密码,但是我想添加一个账号时直接被麻烦到吐。 所以我才想用Winform做一个简单的小工具来帮助我记忆。(仅供我自己使用(所以界面会比较丑。。),但是我会把代码贴出来所以有点c#基础的其实都可以自己做一个) 设想 我的需求非常简单 在我需要的时候,输入一个平台能把对应的账号密码显示出

闻风听雨的博客 2393

【源码】c#开发的密码管理器(Strongbox)

使用c#开发的一款密码保管工具,有挺多网友都在使用,源代码献给大家啦,自行去修改吧。

用C#写的密码生成器

用C#写的密码生成器。可以自定义大小写字母,数字,特殊字符,长度。

C#开发的密码生成器

密码生成器,C#开发。基于.Net FrameWork 2.0 前段时间公司服务器出问题,密码被攻破导致管理员权限丢失。最终结果很悲惨,寄回服务器重装系统。为了加强安全性,决定定期更改服务器密码,于是写了这么一个小东西来生成随机密码。相信40位的大小写数字混合加下划线暴力破解的话,还是得费掉几台电脑才能破解出来吧,嘿嘿嘿嘿。。。。 程序很简单,实现了一些基本的功能:可选择生成密码位数...

weixin_30571465的博客 399

C#基于.NET平台开发的随机密码生成器源码.zip

C#基于.NET平台开发的随机密码生成器源码.zip

基于C#的“密码学”实验演示系统的设计与实现、.NET下的RSA编程、各种密码学算法的C# GUI编程实现

之前接触过一点网络空间安全相关的东西,做了一些笔记,简单分享一下。 基于C#的“密码学”实验演示系统的设计与实现 摘 要:针对密码学课程复杂、抽象、学习难度很大的问题,设计和实现了基于C#的密码学实验演示系统。系统实现了密码学知识的介绍,并实现了用DES 算法、RSA 算法、移位代换算法、置换密码算法、MD5 算法等算法进行加密和解密的演示。测试及应用结果表明,该系统具有常用加密算法的加密解密演示功能,对于密码学课程学习和相关内容的研究具有一定的帮助。 实验演示系统由于其直观性、交互性、动态性等优势,

dujuancao11的博客 1992

免Root抓包神器Packet Capture:安卓App数据捕获全攻略

本文详细介绍了免Root安卓抓包神器Packet Capture的安装与使用全攻略。通过利用安卓系统的VPN Service API,该工具无需Root权限即可捕获并解密App的HTTP/HTTPS网络流量。文章从核心原理、证书安装、实战抓包步骤到结果分析与常见问题排查,提供了完整指南,是移动端开发、安全测试和数据分析的实用利器。

weixin_29232507的博客 1077

Pytorch transformers tokenizer 分词器词汇表添加新的词语和embedding

NLP添加新词汇

7322

KeePass是一款开源的密码管理器。

是一款的密码管理器。KeePass 2.x主窗口(英文)

weixin_40191861的博客 453

保姆级教程:中科蓝讯Downloader配置详解,从软硬开关机到EQ调音一步到位

本文详细介绍了中科蓝讯Downloader的配置流程,从硬件初始化到音频调优的全方位指南。涵盖软硬开关机选择、电源管理、DAC校准、EQ调音等关键步骤,帮助开发者高效完成配置并避免常见问题。特别适合需要精确控制音频设备和电源管理的中科蓝讯芯片开发者。

weixin_33670786的博客 310

鸿蒙平台 KeePass 密码管理器适配实战:从 Windows 到 鸿蒙PC 的 Electron 迁移指南

本文介绍了将密码管理工具KeePass从Windows .NET平台迁移到鸿蒙系统的技术方案。项目采用Electron核心功能+鸿蒙壳工程的混合架构,通过WebView桥接实现跨平台兼容。技术亮点包括:1)纯Web架构处理KDBX文件解析;2)使用Web Crypto API实现AES-256/ChaCha20加密;3)模块化设计分离UI与业务逻辑。项目已在AtomGit开源,包含完整的Electron主进程、渲染进程和鸿蒙适配方案,支持密码管理、自动生成、全局搜索等核心功能。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 1万+

计算机网络(国家电网)

1.局域网中NOS(网络操作系统)提供的通信服务有工作站与工作站之间的对等通信,工作站与服务器之间的通信2.ISP:Internet服务商应用层 APDU(应用层协议数据单元)表示层 PPDU(表示层协议数据单元)会话层 SPDU(会话层协议数据单元)传输层 segment(报文段)网络层 packet (数据包)数据链路层 frame(数据帧)物理层 bit (比特)4.

qq_31715647的博客 3185

如何将rvt(BIM)转换为点云格式

1、为什么将BIM转换为点云格式? 如何使设计BIM与真实场景进行配准,分析在建、未建、已建构建的情况,真实场景是通过点云生产的,和点云配准需要相同的格式。 2、如何转换? 实用工具revit,转换过程如下图,这样就可以转换成三角网格形式。 3、FBX还需要进行一次转换,即转换成点云常用的类型,如bin\ply\pcd等格式。 需要软件cloudcompare.exe,软件下载地址百度云 链接:https://pan.baidu.com/s/1pflcKNc04loBnS1yKR39hw 提取码:obaf

self_Name_的博客 4489

开源 C# 代码:KeePass 开源免费的密码管理器

参考网址: https://keepass.info/news/n180506_2.39.html 界面如下: 有在linux 下,android下,iphone ios 下 web 下的移植版本 Windows下 使用C#开发 源码下载地址1: https://sourceforge.net/projects/keepass/files/KeePass%202.x/2.39....

abc 1065

HarmonyOS应用开发者基础认证

B. 自定义组件:可复用的 UI 单元,可组合其它组件。D. 内置组件:ArkTS中默认内置的基本组件和布局组件,开发者可以直接调用,如Column、Text、Divider、Button等。E. 属性方法:用于组件属性的配置,统一通过属性方法进行设置,如fontSize()、width()、height()、color() 等。在Column和Row容器组件中,justifyContent用于设置子组件在主轴方向上的对齐格式,alignItems用于设置子组件在交叉轴方向上的对齐格式。

牛肉胡辣汤 3818

为什么单点登录更有优势?与密码管理器相比

什么是密码管理器? 密码存储器,也可以称作是密码管理器,采用加密的方式将多个应用系统的用户名和密码存储在一个安全的地方。用户可以通过输入独立的用户名和密码来访问密码管理器,然后从中获得所需要访问的应用系统的用户名和密码。 个人用户经常使用的密码管理器是内置在Chrome或者是Safari浏览器中的,在这种情况下用户的密码是被Google或Apple公司存储的。企业用户可能会采购一个专门的密码管理工...

IDAAS的博客 969

App爬虫实战篇-以华为真机手机爬取集换社的app为例

在开始学习这篇文章之前,建议你先按照之前2篇文章(和),配置必要的环境,才可以继续完成本章节内容。

youbingchen的博客 780

C# 上位机 YOLO 实战:从数据采集到目标识别的全流程拆解

本文以工业螺栓缺陷检测为例,完整拆解了C#上位机+YOLO从数据采集到目标识别的全流程。数据采集:保证图像质量,线程安全采集,必要时归档数据;预处理:适配YOLO模型输入格式,复用对象减少内存开销;推理解析:正确解析张量结果,过滤低置信度目标;落地环节:可视化展示结果,实现工业交互和日志记录。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1454

代理要求提供用户名和密码_什么是密码管理器?为什么单点登录更具优势?

什么是密码管理器?密码存储器,也可以称作是密码管理器,采用加密的方式将多个应用系统的用户名和密码存储在一个安全的地方。用户可以通过输入独立的用户名和密码来访问密码管理器,然后从中获得所需要访问的应用系统的用户名和密码。个人用户经常使用的密码管理器是内置在Chrome或者是Safari浏览器中的,在这种情况下用户的密码是被Google或Apple公司存储的。企业用户可能会采购一个专门的密码管理工具,...

weixin_39750195的博客 1260

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

免费安全且小巧的密码管理器:倦意密码本 JyPassword 发布!

本文介绍了一款简单易用的本地密码管理软件,具有以下特点:1.极简三步操作(增加、写入、保存);2.AES加密本地存储确保安全;3.仅200KB的轻量级独立程序;4.完全免费且持续更新。软件支持密码本和备忘录功能,提供导入/导出(支持TXT格式)、自动保存及托盘快捷操作(显示/锁定/退出)。首次使用需设置5位以上主密码(遗失无法找回)。注意需手动点击保存按钮防止数据丢失。开发者声明因无微软签名可能被误报病毒,建议添加白名单使用。

juanyi123的博客 653

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

个人密码管理器小工具功能介绍及下载

【摘要】这是一款基于C#开发的本地化开源密码管理工具,专为注重隐私安全的用户设计。核心特点包括:1)采用双重安全机制(主密码+密钥图片验证)和双数据库隔离(生活/工作库);2)支持密码全生命周期管理,含加密存储、模糊检索及一键复制功能;3)提供Excel加密备份,可自定义独立密码;4)完全离线运行,无网络传输风险。软件基于.NET Framework 4开发,具备防暴力破解、密码强度检测等安全措施,源码开放确保透明度。适用于需要安全存储多平台账号密码且拒绝云存储的用户,数据可通过拷贝加密数据库跨设备同步。已

flybird1015的博客 203

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

一个简单的密码管理器

PasswordsKeeper v1.0.0    简单的管理你的密码。

qq_34831192的博客 596

Keepass2Android:3步快速部署你的Android密码管理器终极方案

在数字时代,密码管理已成为每个人必须面对的安全挑战。Keepass2Android 是一款专为 Android 平台设计的开源密码管理器,它让你能够安全存储和检索密码及其他敏感信息。与 KeePass 2.x 和 KeepassXC 等桌面版本完全兼容,这款应用通过强大的加密技术保护你的密码数据库,支持跨设备同步,并提供了丰富的云存储选项。无论你是技术新手还是资深开发者,Keepass2Andro

gitblog_00260的博客 733
上一篇: C#画一个时钟
下一篇: C#实现黑客帝国字幕特效
Qian_F
博客等级 码龄15年 98粉丝 42原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值