使用正则表达式提取 OTP 密钥

Extract OTP Key using regex

我有一个脚本可以在 linux 系统上通过 SSH 密钥和 OTP 启用 OTP/Google 身份验证。启用 OTP 后,我会向用户发送带有 otpauth URL 的短信。我需要从 otpauth URL 中提取(通常是 16 位数字密钥)。

如果他们想要可见的二维码,URL 的示例如下:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@host.com%3Fsecret%3DWFHGHUFAUYXZFA44%26issuer%3DCOMPANY

如果他们想要一个 otpauth url 他们可以点击导入令牌/密码管理器,我使用以下方法:

otpauth://totp/user@host.com%3Fsecret%3DWFHGHUFAUYXZFA44%26issuer%3DCOMPANY

如何从 URL 中提取密钥?

使用grep -oP:

url='https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@host.com%3Fsecret%3DWFHGHUFAUYXZFA44%26issuer%3DCOMPANY'

grep -ioP '[?&]chl=.+?%3Fsecret%3D\K[^%]+' <<< "$url"
WFHGHUFAUYXZFA44

secret%3D(.*?)(?=%|$) 会找到 'secret'、%3D,然后是数字,直到到达行尾或另一个 % 字符。

Regex101.com example