密码管理(Password Management)肯定所有人都不会陌生,密码管理的来源也是来自于实际需求,当人们需要使用到密码的场景越来越多,场景也越来越复杂,密码的记录就成为了“难题”和“负担”,很简单举起两个栗子:当我只有一个银行卡的时候,可能我记得住它的“Pos支付密码”,如果银行卡多起来呢?换工作就多一张工资卡、搞活动买基金开户、朋友推荐办信用卡、考试机构指定xx银行借记卡......,有时不是你想不想多起来的问题;这这是银行卡,平时上网QQ有几个?微信有几个?支付宝就需要俩密码吧,京东可能也有俩,购物网站、各类论坛、大小银行、各类理财......

So so,密码管理应运而生,用一个软件帮你“存储”你的私密信息,然后你只需要记住一个密码,就可以“查看”你存储的私密信息,这就是密码管理软件基础的模式。我原来也为自己做个一个密码管理的小玩意儿,后来发现一个问题,我还是要记录至少一个密码,而且万一把这个密码忘记了那就完蛋了。而且还有一个问题,如果别人知道了你的密码,也可以随便查看,密码泄露那就誰也没有办法了。想来想去,我这种“懒人”还是觉得我还得记得一个密码还是累,万一哪天忘记了或者被人猜出来理论上,就可以在任何地方随时尝试输入破解。我就想把这个东西再改进一下,我不想记密码了,一个都不想了,还得相对安全,怎么办...

这是一个加密本质的问题我觉得,被锁起来的数据就是“锁”,密码就是“钥匙”,无论加密算法简单不简单,密码长度3个还是300个,其本质就是不要让人同时得到锁和钥匙,其实就 OK 了,我又不是国家机关秘密组织,被黑客主动攻击的概率恐怕比中500万还小,哪怕加密算法简单只要能遮人耳目即可,不能同时得到钥匙和锁对多数人来说其实就够用了。所以,我可以借鉴有些加密软件的功能,即不让用户以输入密码的方式作为加密手段,这样用户就不必记录密码。用户不必关心软件如何运转,软件只需要加密完成,把钥匙给用户,告诉他“好好保管!”就行了,按照这个思路,我给自己重做了一个。

我的做法是,用户只需要输入要加密什么(明文),软件自己生成“钥匙”、自己加密、自己存储,完事儿把钥匙交给用户,这个逻辑虽然简单但是被突破也不容易,理由如下:

1. 如果数据和钥匙文件没有被同时得到,那几乎没有被破解的可能(托加密算法的福,虽然用户不必关心加密算法是什么)

2. 数据和钥匙是两个独立的文件,用户可以随便更改文件名、扩展名,甚至对文件做乱码加密,只要过程是可逆的便可恢复。所以,就算同时得到了,能知道它们有关联的也是神仙了,比如一个文件叫“勇气.mp3”,另一个叫“公司人事资料文档.txt”,还可以把它们放到不同的路径、不同的硬盘,甚至一个在邮箱一个在本地,反正随便吧...

3. 就算知道了两个文件有关联,程序用什么算法你还得知道,因为你要破解...(这是个道理,虽然我现在用的逻辑很简单)

经过以上三点,如果你让别人拿到了两个文件、还让人知道这俩文件一个是锁一个是钥匙,还让人拿到了对应的程序或者是算法...那我也是醉了,那你直接告诉人家就得了。

上俩图吧,我是怎么工作的,首先添加内容,因为是 Lite 版,随意一切一切都精简

点击保存后,程序自动加密,用户不用自己提供密码,也就是钥匙。完成后,结果是这样的

添加完成后,分别把数据和钥匙保存成两个文件,分别存放,别丢就OK了!

【C#】聊聊不需要记密码的密码管理的更多相关文章

  1. Ubuntu16---安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码

    Ubuntu16安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码 mysql默认密码为空 但是使用mysql -uroot -p 命令连接mysql时,报错 ERROR 1045 ...

  2. Postgres使用ALTER USER命令修改用户的密码、密码过期,锁定,解锁

    使用ALTER USER命令修改用户的密码.密码过期,锁定,解锁 (1)修改用户的口令,将用户的口令修改为新的密码 highgo=#create user test with password ‘te ...

  3. linux和windows互传文件/用户配置文件和密码配置文件/用户组管理/用户管理

    2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2 用户组管理 3.3 用户管理 linux和windows互传文件 显示日期date [root@centos_1 ...

  4. Ubuntu 破解密码及用户管理

    Ubuntu 破解密码及用户管理 ubuntu 16.04 破解密码 useradd 实现以下要求 1.ubuntu16.04破解密码 2.创建下面的用户.组和组成员关系 名字为xipudata 的组 ...

  5. Laravel实现找回密码及密码重置的例子

    https://mp.weixin.qq.com/s/PO5f5OJPt5FzUZr-7Xz8-g Laravel实现找回密码及密码重置功能在php实现与在这里实现会有什么区别呢,下面我们来看看Lar ...

  6. MYSQL命令练习及跳过数据库密码进行密码重新设置

        2.看当前所有数据库:show databases; 3.进入mysql数据库:use mysql; 4.查看mysql数据库中所有的表:show tables; 5.查看user表中的数据: ...

  7. 【C#】聊聊不需要记密码的密码管理补充帖 —— 具体实现

    开篇第一句话,就是“小白继续,有实际经验的兄弟们可以洗洗睡了”,因为这个 Lite 版是个实验性的实现,也由于水平原因源码不忍直视,所以如果你坚持看完了,请留下宝贵意见. 以下,干货: 基本模式: 程 ...

  8. git ssh https 踩坑记 ---- 域账号密码更新

    前几天突然通知要更新公司的域账号密码,然后git pull就一直报 fatal: Authentication failed for 'https://git ... 很奇怪的是,有一个项目git p ...

  9. MySQL--忘记MYSQL管理员密码

    如root用户密码,可以按照以下方式来修改: STEP1: 停止MySQL服务 ps -ef | grep -v 'grep' | grep 'mysqld' | awk '{print $2}' | ...

随机推荐

  1. 基于注解Spring MVC综合Hibernate(需要jar包,spring和Hibernate整合配置,springMVC组态,重定向,)批量删除

    1.进口jar 2.web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app ver ...

  2. elasticsearch的rest搜索---对于相关度的大牛的文档

    目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0   三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 五.对于相关度的大牛的文档 http: ...

  3. hive union all 使用

    功能:将两个表中的 同样的字段拼接到一起 測试: create external table IF NOT EXISTS temp_uniontest_ta ( a1 string, a2 strin ...

  4. Group and sum array of hashes by date

    I have an array of hashes like this: [{:created=>Fri, 22 Jan 2014 13:02:13 UTC +00:00, :amount=&g ...

  5. set RowCount 与 top n

    有时,采用top n中间n它是一个变量,这将需要使用()去完成: declare @count1 int set @count1 = 8 select top <strong>(@coun ...

  6. 基于Hama并联平台Finding a Maximal Independent Set 设计与实现算法

    笔者:白松 NPU学生. 转载请注明出处:http://blog.csdn.net/xin_jmail/article/details/32101483. 本文參加了2014年CSDN博文大赛,假设您 ...

  7. Oracle 免费的数据库

    Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持 一.Oracle XE 数据库与连接工具安装使用 O ...

  8. Factorization Machines 学习笔记(二)模型方程

      近期学习了一种叫做 Factorization Machines(简称 FM)的算法,它可对随意的实值向量进行预測.其主要长处包含: 1) 可用于高度稀疏数据场景:2) 具有线性的计算复杂度.本文 ...

  9. 使用Jenkins来构建Docker容器

    使用Jenkins来构建Docker容器(Ubuntu 14.04) 当开发更新了代码,提交到Gitlab上,然后由测试人员触发Jenkins,于是一个应用的新版本就被构建了.听起来貌似很简单,dua ...

  10. javascript7

    语句:条件,循环,跳转, 表达式语句,复合语句和空语句,声明语句,var,function,条件语句,switch,循环,标签语句,break语句,continue语句,return语句,throw语 ...