【问题标题】:Invalid barcode - Google Authenticator - iOS - padding with =无效的条形码 - Google Authenticator - iOS - 用 = 填充
【发布时间】:2018-08-20 08:50:49
【问题描述】:

iOS 上的 Google 身份验证器存在问题。我们使用以下标准代码 sn-p 来生成 TOTP 密钥

KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(keySize);
byte[] byteKey = keyGen.generateKey().getEncoded();
Base32 base32 = new Base32();
return base32.encodeAsString(byteKey);

生成的代码在末尾用 = 符号填充,如下所示。

6ICU5K45MHIZCMTR3DABCDFP7XSZGV4DVTRABCOPD5RDQRGOLTGQ====

然后我们会根据这个字符串生成一个适当的二维码,但是在某些设备上扫描它时会出现问题。此代码在 Android 上使用 Google Authenticator 有效,但在使用 iOS 版本时失败,并出现以下错误...

无效的条形码

条形码“otpauth://totp/MyDomain:user@user.com?secret=6ICU5K45MHIZCMTR3DABCDFP7XSZGV4DVTRABCOPD5RDQRGOLTGQ%3D%3D%3D%3D&issuer=MyDomain”不是有效的身份验证令牌条形码。

如您所见,尾随 = 填充被编码在秘密字符串中,这似乎会导致 iOS 上的错误。不知道为什么这在 iOS 上会失败,但在 Android 上却没有,但这是我们需要添加的东西

这是 GA GitHub 上的一个老问题,似乎是同一个问题,但没有解决方案... https://github.com/google/google-authenticator/issues/267

& 这里有人通过在编码之前播种字符串解决了这个问题,但这在上面的场景中不起作用 Google Authenticator on Apple devices, certain secrets are not valid

关于这个问题的原因或可能的解决方法有什么想法吗?

【问题讨论】:

  • 如果百分比encoding导致问题,那么您可能需要在收到secretdecode
  • 我已经对此进行了测试,甚至使用 = 而不是编码字符串手动将代码输入到 GA 中,我也遇到了同样的问题。它只有在我删除尾随 = 符号时才有效,我不想这样做。太老套了,我不喜欢

标签: ios one-time-password google-authenticator key-generator base32


【解决方案1】:

以防万一其他人遇到这个问题,我猜他们会考虑到 iOS Google Authenticator 的问题,我通过用基本 32 个可编码字符替换尾随 = 字符解决了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2021-06-28
    • 2019-01-30
    • 1970-01-01
    • 2020-08-20
    • 2022-01-19
    相关资源
    最近更新 更多