本文首发于公众号 极客枫哥 ,日更分享各种好玩的软件、编程知识和个人成长故事
大家好啊,我是枫哥~十年互联网程序员,擅长 js 逆向,python 爬虫,各种前后端技术。热衷于分享各种好玩、实用的技术和软件工具。
今天给大家分享一个我自己写的随机密码生成器,现在我们需要注册的应用越来越多,又不可能都用同样的密码,所以就写了一个密码生成器来随机生成,一起来看看吧。
看完本文你可以学到一下内容
- 如何用 nodejs 编写一个随机密码生成脚本;
- 如何将 nodjes 脚本注册成全局命令;
- 利用 alfred workflow 更方便的调用命令;
编写脚本
先梳理一下功能,实现一个密码生成器,需要支持传入密码长度,和是否包含特殊字符。命令执行完成后可以自动将密码复制到系统剪切板。
javascript
function generateRandomPassword(length, includeSpecialChars) {
let charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
if (includeSpecialChars) {
charset += "!@#$%^&*()_+<>?";
}
let password = "";
for (let i = 0, n = charset.length; i < length; ++i) {
password += charset.charAt(Math.floor(Math.random() * n));
}
return password;
}
于是我们随便写写,就有了上面这个函数,测试一下生成一个 8 位的密码,也没什么问题。
接下来再编写一个入口函数,读取命令行传入的参数,传递给 generateRandomPassword 函数
javascript
function main() {
const args = process.argv.slice(2);
const length = args[0] ? parseInt(args[0], 10) : 8;
const includeSpecialChars = args.includes('--special');
const password = generateRandomPassword(length, includeSpecialChars);
console.log(password);
}
最后,我们再使用 clipboardy 来把生成好的密码复制到剪切板,一行代码就可以了,还是很方便的。
javascript
clipboardy.writeSync(password);
注册全局命令
使用的时候如果每次都要 cd 到脚本的目录,然后执行 node index.js 8 就太麻烦了,有没有办法可以注册成一个全局的命令呢?答案肯定是可以的,而且也很简单。
我们只需要在 package.json 中配置一下 bin,randompassword 表示命令, ./index.js 表示要执行的脚本
javascript
"bin": {
"randompassword": "./index.js"
}
然后执行
javascript
npm i . -g
这样脚本就注册成一个全局命令了,我们来测试一下
也是没有什么问题的,使用了一段时间后发现还是有点麻烦,要使用的时候我先要切换到命令行,然后调用命令。能不能把第一部省略呢?在任意时候都可以直接执行这个命令
创建 alfred workflow
创建一个新的 workflow 名字就叫 rp 好了,更简洁一些,Script 部分填写要执行的脚本
脚本和上面的基本一致,多了一个利用 alfy 将内容输出到 alfred 的功能。
javascript
alfy.output([
{
title: '密码:' + password,
subtitle: 'Press ⌘L to see the full error and ⌘C to copy it.',
arg: `${password}`,
},
]);
执行一下
最后在添加一个 Copy to Clipboard 步骤,按下回车就可以把密码复制到剪切板了,终于舒服了。
看到这里肯定有小伙伴想问了,你生成的密码这么复杂,根本记不住,后面怎么管理呢?后续的文章我会分享一下我的密码管理方案,敬请期待~
总结
本篇文章记录了我个人日常注册网站、应用时随机生成密码的探索,先后尝试了 node 脚本,全局命令,alfred workflow 等方式来优化这个步骤,希望能对你有所启发~感谢阅读。