惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Register - Security
The Register - Security
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
量子位
C
Check Point Blog
博客园 - 【当耐特】
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Engineering at Meta
Engineering at Meta
Recorded Future
Recorded Future
The Last Watchdog
The Last Watchdog
博客园 - Franky
N
Netflix TechBlog - Medium
Webroot Blog
Webroot Blog
A
About on SuperTechFans
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
D
Docker
S
Security Affairs
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
V2EX - 技术
V2EX - 技术
Jina AI
Jina AI
Help Net Security
Help Net Security
L
LangChain Blog
P
Proofpoint News Feed
The Cloudflare Blog
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
Schneier on Security
Schneier on Security
Recent Announcements
Recent Announcements
Attack and Defense Labs
Attack and Defense Labs
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
Microsoft Security Blog
Microsoft Security Blog
H
Heimdal Security Blog
P
Proofpoint News Feed
O
OpenAI News
H
Help Net Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
爱范儿
爱范儿
Security Archives - TechRepublic
Security Archives - TechRepublic

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
一日一技 | 用 LaunchBar 等启动器快速输入双重认证密码 - 少数派
2021-01-19 · via 少数派

如果我们仅仅使用密码保护网络账户的安全,风险往往很高。一旦密码泄漏,则账户危矣。为了避免此类风险,如今很多网站都提供了不同的双重验证 (2-Factor Authentication) 的方案。例如在新设备上登入 Apple 账号,会在其它注册了此账号的 Apple 设备上弹出登录信息,确认之后会显示一个六位数字的临时密码,我们需要把这个临时密码填入新设备中,即可验证成功。

还有一些其它的双重验证方案,例如发送验证码短信、验证码邮件。除此之外,还有一种非常常见的方案,即在验证了用户名和密码后,系统提示用户输入一个随时间变化的一次性密码(通常也是一组六位数字)进行额外验证,如 Google、GitHub、Amazon、PayPal、Outlook 等网站都提供了这种双重验证方案:

为此我们需要在手机上安装一个身份验证器,如 Microsoft Authenticator、Google Authenticator 等,来生成这个一次性密码:

虽然保证了安全性,但操作上难免略显繁琐,每次在电脑上登录账号时,还需要解锁手机查看临时密码。本文以 LaunchBar 为例,介绍一种可以直接在电脑上生成并查看此密码的安全的方法,这个方法也可以直接套用在 Raycast、Alfred 等其它启动器或自动化工具中。

开启流程

如果你还没使用过双重验证,本节以国区亚马逊为例,简述开启双重验证的流程。其它支持此类双重验证的网站的操作与此类似。

在登录了国区亚马逊之后,进入 我的帐户登录与安全两步验证设置 页面,点击 开始

在出现的 注册两步验证器 页面,选择 认证器应用程序。第一步提示需要在手机上安装一个验证器并打开,这里亚马逊推荐了 AWS Virtual MFA、Google Authenticator、Microsoft Authenticator 三款。

然后用验证器程序扫描出现的二维码,就可以把一个亚马逊自动生成的共享密钥添加到验证器中。之后就可以在验证器中看到新增了一行六位数字密码,且每 30 秒更新一次。
将对应出现的六位数字密码输入到第三步的密码框中,点击确认,就完成了注册验证器。

如果选用的验证器不支持扫描二维码,则可以点击二维码下方的 无法扫描二维码,将出现的密钥手动输入到验证器中以完成注册。此密钥即是二维码中所保存的信息,我们此时不妨先把它复制粘贴到一个文本文件中,用于之后使用。

作用原理

为什么使用不同的验证器都可以生成这个一次性密码呢?要解释这个问题,我们先要了解一下在使用此类双重验证登录账号时到底发生了什么。

以上节的国区亚马逊为例,你输入用户名和密码,并用手机端的验证器通过 TOTP 算法生成了临时密码,将它提交给服务器。服务器随即也运行 TOTP 算法得到临时密码与你输入的内容进行核实,如二者一致,则登录成功。

这里提到的 TOTP 算法,全称是「Time-based One-Time Password」,即「基于时间的一次性密码算法」。它是一种根据预先共享的密钥与当前时间计算一次性密码的算法,此处用到的密钥即是上一节中通过扫描二维码或手动输入保存在验证器中的密钥。这个算法要求手机与服务器上的时间大致同步,因此默认是每 30 秒更新一次。

TOTP 算法是一项互联网标准算法,也就是说,其实各种验证器中集成的都是相同的算法,因此,只要在不同验证器中以及服务器中保存的密钥相同,在同一时间间隔 (30 秒) 中算出的密码也就是相同的。

因此,这种算法的本质是,为了避免用户自己设定的密码泄漏,由服务器自动生成了一个足够长足够复杂的第二密码给用户,而用户在双重验证时不需要输入直接输入这个复杂的第二密码,而是输入这个密码与当前时间相结合计算得出的一个短密码进行验证。同时,也不可能从得到的短密码与当前时间反推出真实密码,以保障此密码的安全。

因此,服务器生成的密钥是整个双重验证的安全性的关键所在。如果此密钥一但被除用户和服务器以外的第三方得到,则双重验证就失去了意义。这也就是为什么在很多网站中一旦开启双重验证并绑定了验证器之后,通常无法再在账户设置中看到这组共享密钥。这也是为什么很多用户对可以在云端同步双重验证账号信息的验证器存在质疑,因为在云端同步密钥需要另外把密钥存放在第三方的服务器上,大大增加了密钥被窃的风险。

其实过去在生活中还有另一个 TOTP 密码的应用实例,即下图所示的网上银行口令令牌。其中也储存着网银服务器生成的密钥,结合它与当前时间通过 TOTP 算法计算出六位数字显示在上面的显示屏上。但常见的口令令牌的更新间隔是一分钟,这可能是由于口令令牌上的本地时间与服务器上的时间更容易产生较大的偏差,因此需要放宽更新间隔以容错,毕竟口令令牌不能像智能手机一样实时在线校正本地时间。

在电脑上生成 TOTP 密码

了解了上述原理,我们不难想到,如果我们在电脑上有一个实现 TOTP 算法的软件,就可以直接在电脑上生成双重验证密码了,如果能把这个软件与启动器相结合,就可以直接在我们常用的启动器中查看此密码。恰好有一个命令行工具可以优雅地实现这个功能:oathtool。它是工具包 OATH Toolkit 中的一个命令行工具组件,此工具包提供了用于构建一次性密码验证系统的各式组件。

要使用它,首先需要我们在终端(Terminal)中通过 Homebrew 来安装这个工具包,输入下列命令并回车以完成安装:

brew install oath-toolkit

完成安装之后,我们可以在终端中尝试通过用以下命令使用它:

oathtool --totp --base32 "你的密钥"

将命令中「你的密钥」四个字替换成上面生成的密钥,就可以得到六位数字,而这六位数字与手机上的验证器生成的数字一致。

上述实验成功后,我们就可以借助 oathtool 制作一个 LaunchBar 动作,其核心功能通过一个简单的 Shell 脚本实现。

1. 通过 LaunchBar 启动 Action Editor;

2. 通过快捷键 ⌘N 新建一个动作,起个便于记忆的名字,如「2FA | Amazon.cn」,意为「国区亚马逊的双重验证码」:

3. 点击窗口右侧上方的 Scripts 标签页,脚本类型选择 Shell Script,并勾选 Returns result 一项:

4. 点击脚本类型 Shell Script 右边的 Edit 按钮,对脚本进行如下编辑:如下图所示,脚本中的前四行是注释 (以及 Shebang 信息) ,不用修改,我们将后面的默认内容删除,并粘贴入如下内容,同样,需要将「你的密钥」替换成之前保存的密钥:

oathtool_path=/usr/local/bin/oathtool
echo `$oathtool_path --totp --base32 "你的密钥"`

添加的两行中的第一行,将 oathtool 的绝对路径用变量 oathtool_path 表示,这是因为 LaunchBar 脚本中需要尽量使用第三方命令行工具的绝对路径,以防 LaunchBar 找不到该命令行工具的位置。在第二行中,将之前使用的 oathtool 命令的结果通过命令 echo 输出出来。在 LaunchBar 中,echo 输出的命令会直接显示到 LaunchBar 界面上。

这样,这个动作就初步制作完成了。你可以尝试在 LaunchBar 中调用这个动作,并把得到的结果与手机上的验证器的结果相比较,当然,它们一定是一致的。

对密钥进行统一管理

然而此时制作的动作还有一个很大的问题,就是我们直接把密钥明文写在了脚本中,这会导致密钥泄漏的风险。例如如果你会把常用的 LaunchBar 动作在 GitHub 分享的话,无意中上传了包含明文密钥的文件可谓是极不明智。为了避免这种风险,我们需要把常用的密钥放置到特定文件夹中进行统一管理。

例如,我在 家目录 (即与 桌面文档 等文件夹平级的位置) 中建立了一个名为「Keys」的文件夹,把密钥全都放在这里。在这种情况下,我们可以把上面的密钥保存在这个文件夹中的一个文本文档中,对其命名为「amazon.cn.txt」。在这种情况下,我们制作的 LaunchBar 动作的脚本需要做一个小的调整,把上面提到的两行脚本内容修改为以下的三行内容:

oathtool_path=/usr/local/bin/oathtool
key=`cat ~/Keys/amazon.cn.txt`
echo `$oathtool_path --totp --base32 "$key"`

其中,在粘入的第二行我们可以看到,我们通过 cat 命令读取了文件 ~/Keys/amazon.cn.txt 中的内容,即我们的密钥内容,并用变量 key 代替。再在第三步中通过 oathtool 命令计算出当前时间下的六位密钥。

这样,我们就可以安全地分享我们的动作而不用担心在分享动作的时候把密钥泄漏了。

对密钥进行加密

可能你会觉得,把密钥以明文的方式保持在本地,也不是一个安全的方式。如果这个文件被别人拷贝走了,仍然有泄漏的风险。那么在这一节中,再介绍一个对在密钥进行加密的方式,以保证这个文件只有在你的电脑上可用,在别人的电脑上无法使用或破解。

这里需要借助一个操作简便的加密脚本 sshenc。这个脚本提供了一个借助 SSH 的公钥和私钥进行 非对称加密 的方法。所谓的非对称加密,简单来说,是指加密和解密使用不同的密钥文件,一把作为公开的公钥,可以发送给给你发送信息的人,他用公钥来对信息进行加密,另一把作为私钥,由你在本地保存好,对信息进行解密。如果没有私钥的话,加密的信息就无从破解。在本文的使用中,我们用你电脑中的公钥进对前文中的双重验证密钥进行加密,由于用于解密的私钥只存放在你当前的电脑上,所以只有当前这台电脑可对加密内容进行解密。要实现这个过程,我们需要两项准备工作,一是生成 SSH 公钥和私钥,二是下载加密脚本 sshenc

生成 SSH 公钥和私钥

这组公钥和私钥,我们通过 SSH 工具来自动生成。SSH 是一种加密的网络传输协议,最常见的用途是远程登录系统,人们通常利用 SSH 来传输命令行界面和远程执行命令。这里我们只用它来生成在公钥和私钥。

当然我们需要首先来检查一下你的电脑上是不是已经存在 SSH 的公钥和私钥。这两个文件保存在 ~/.ssh/ 目录中。我们可以直接在终端中输入 ls ~/.ssh 来列出此目录中的内容,其中 id_rsa.pubid_rsa 分别就是公钥和私钥文件。

如果没有看到这两个文件,则表明你的电脑上还没有生成过这组密钥。此时你只需要在终端中接着输入 ssh-keygen 并回车来生成它们。在生成过程中会遇到几个问题,在每个问题后面直接回车即可以选择默认选项。运行结果如下:

此时再运行之前的 ls ~/.ssh 命令就可以看到生成的公钥和私钥了。

下载加密脚本 sshenc

接着我们需要下载 sshenc 脚本并放置在合适的位置,我把它放在了家目录下的 Scripts 文件夹中,即 ~/Scripts 中。只需运行以下四行命令即可:

mkdir ~/Scripts
cd ~/Scripts
curl -O https://sshenc.sh/sshenc.sh
chmod +x sshenc.sh

这四行命令的作用分别是:

  1. 建立目录 ~/Scirpts
  2. 进入此目录,
  3. 下载脚本至此目录,
  4. 给于此文件执行许可权。

之后这个文件就下载在 Scripts 文件夹中可供使用了。使用方法在其 官网 上有详细说明。我们用到的是如下两条:

加密

sshenc.sh -p ~/.ssh/id_rsa.pub < 待加密文件.txt > 生成的加密文件.txt

解密

sshenc.sh -s ~/.ssh/id_rsa < 加密文件.txt

对明文双重验证密钥文件进行加密

通过上面的加密命令,我们可以把亚马逊提供的密钥 ~/Keys/amazon.cn.txt 进行加密并保存在另一个文件中,我们把这个文件也放在目录 ~/Keys/ 中,命名为 amazon.cn.encrypted.txt,命令如下:

~/Scripts/sshenc.sh -p ~/.ssh/id_rsa.pub < ~/Keys/amazon.cn.txt > amazon.cn.encrypted.txt

加密之后,我们可以在 Keys 目录中查看新生成的 amazon.cn.encrypted.txt 文件,这个文件只能通过你电脑上的 SSH 私钥进行解密,也就是说,离开了你的电脑,则其被加密的信息是无法还原的。而此时我们已不再需要明文的文件 amazon.cn.txt 了,可以把它直接删除。

在 LaunchBar 脚本中加入解密语句

现在我们需要在制作的 LaunchBar 动作的脚本中对加密的密钥文件进行解密,只需把之前写好三行内容修改为以下五行:

oathtool=/usr/local/bin/oathtool
sshenc=~/Scripts/sshenc.sh
encrypted_secret_key=~/Keys/amazon.cn.encrypted.txt
key=`$sshenc -s ~/.ssh/id_rsa < $encrypted_secret_key`
echo `$oathtool --totp --base32 "$key"`

其中第二行定义了加密脚本 sshenc 的位置,第三行定义了加过密的亚马逊密钥的位置,第四行使用解密语言对加密密钥进行解密,再在第五行中求得双重验证码并显示出来。

至此,我们就制作完成了一个比较安全的生成双重验证码的 LaunchBar 动作。要为其它账号也生成双重验证码,只需要修改脚本中的第三行,将它改成相应的加密密钥文件的路径即可。

制作其它自动化工具的动作

这个 LaunchBar 的脚本当然也可以用运到其它的启动器等自动化工具中,下图是一个 Raycast 的例子:

在这个动作中,使用了相同的脚本,只需参考其模板脚本在脚本开头进行参数配置即可,具体的配置方法可参照 这篇文章

结语

本文介绍了常见的双重验证的使用方法和其背后的原理,同时其中也分享了在电脑端生成此类验证码的方法。并通过这个方法制作了一个 LaunchBar 动作,同时,用相同的脚本也可以给不同的自动化工具制作相应的动作。最后介绍了一个对明文文件进行加密的方法。希望大家能从中得到一些小的收获。

> 下载少数派 客户端、关注 少数派公众号,发现更多实用小技巧 ⚙️

> 特惠、好用的硬件产品,尽在 少数派 sspai 官方店铺 🛒