背景

最近由于种种原因,我在各大站点注册了相当多的账号和密码,加上以前的账号,大概有百十来个。为了防止被撞库,我几乎不会在不同站点使用相同的密码,这样一来,想让我记住上百个账号密码是不可能的。我以前是记在手机的便签里,但是这样一来不安全,二来不能搜索指定密码,很不方便。市面上有很多优秀的密码管理软件,但由于我目前的密码记录已经有了自己的格式,无法直接导入,更何况我不愿意把密码记录在其他人的软件里,所以想找个方法来管理账号密码。

苦逼的是,我没有任何前后端开发经验,也不会做手机APP,真的很难想自己该怎么处理几百条账号密码,直到某次我上完厕所……

需求分析

  1. 能够直接导入或使用现有的记录的账号密码;

  2. 能够随时随地很方便地查看自己的账号密码;

  3. 自己的密码库需要认证才能访问;

  4. 能够查找到自己需要的账号密码;

  5. 能够方便地添加新密码。

资源准备

  • Nginx公网服务器一台

  • 现有的密码库

具体思路

把账号密码放在自己的服务器上,使用https连接,并且使用Nginx设置访问认证,在web页面上查看自己的账号密码。使用浏览器的页内查找功能查找指定的密码。最后,使用一个小脚本,登陆服务器添加新密码。

实际操作

建立新的Nginx站点

/etc/nginx/sites-enabled/下添加新的配置文件example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 443 ssl;

server_name example.example.com;
charset utf-8,gbk;

ssl on;
ssl_certificate /etc/ssl/private/example.example.com_bundle.crt;
ssl_certificate_key /etc/ssl/private/example.example.com.key;

location / {
root /var/www/example;
index example.txt;
auth_basic "Please input the password:";
auth_basic_user_file /var/www/example/auth.db;
}
}

当然,你得有个ssl证书,如果没有的话,使用http……也无可厚非。

记得加上charset utf-8,gbk;不然中文的支持不好。

这里的example.txt即我自己以前记录的密码库。

然后配合Nginx的认证参数,使用sudo htpasswd -bc /var/www/example/auth.db test 123456生成Nginx的认证用户名和密码。

设置权限

切换至/var/www/example/下,我要确保我自己的密码不能让其他用户读取。

sudo chmod 660 example.txt

sudo chmod 660 auth.db

然后,为了能让自己修改密码库文件,把自己加入到root组。

sudo usermod -G root username

重新登陆。

制作添加密码的小程序

我用C++撸了一小段,凑合着用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//adk.cpp
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<string>

using namespace std;

int main()
{
ofstream tmpFile;
string data;

tmpFile.open("tmp.txt");

cout << "Name: ";
getline(cin,data);
tmpFile << data << endl;
cout << "Account: ";
getline(cin,data);
tmpFile << data << endl;
cout << "Password: ";
getline(cin,data);
tmpFile << data << endl << endl;

tmpFile.close();

system("cat tmp.txt >> /var/www/example/example.txt");
system("rm tmp.txt");

return 0;
}

运行的效果是这样的:

1
2
3
4
5
username@server:~$ ./adk
Name: testname
Account: testaccount
Password: 123456
username@server:~$

此时,这一段信息已经附加到密码库后面。

页面效果

效果

后记

还是觉得,太蠢太蠢。