問題タブ [base32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 無効なバーコード - Google 認証システム - iOS - = のパディング
iOS の Google Authenticator に問題があります。以下の標準コード スニペットを使用して TOTP キーを生成しています。
生成されるコードは、以下のように末尾に = 記号が埋め込まれます。
6ICU5K45MHIZCMTR3DABCDFP7XSZGV4DVTRABCOPD5RDQRGOLTGQ====
次に、この文字列に基づいて適切な QR コードを生成しますが、一部のデバイスでスキャンすると問題が発生します。このコードは、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
& これは、エンコードの前に文字列をシードすることで問題を回避した人ですが、これは Apple デバイスの上記の Google Authenticator のシナリオでは機能しません。特定の秘密が無効です
問題を回避する理由または考えられる方法についてのアイデアはありますか?
java - TOTP Base32 対 Base64
私が見つけたすべての TOTP 実装 (RedHat による FreeOTP でさえも) は、生成されたシークレットに Base32 エンコード/デコードを使用しています。Base32 は約 20% 多くのスペースを使用し、その主な利点は人間が読みやすいという点にあるため、Base64 が使用されないのはなぜですか? とにかく、生成のためにユーザーに表示されません。
実装内のすべてのコメントは、実装がRFC6238 / RFC4226に従っていると述べていますが、RFC ドキュメント内で Base32 について述べられていることは何も見つかりません。
転送によるデータの安全性のために、Base32 または Base64 に変換することは明らかに理にかなっていますが、なぜ Base64 を使用しないのでしょうか?
python - base64 lib の b32decode を使用して base32 をデコードするときのパディング例外を無視します
base64 lib を使用して base32 文字列をデコードしようとするときに、「不正なパディング」例外を無視する方法が必要です。
この投稿Python: Ignore 'Incorrect padding' error when base64 デコーディングは base64 (b64decode) デコーディングの問題を解決します。私は同じことをしようとしました(受け入れられたパディングの最大数を追加します。私がmsitakenでない場合、base32の場合は6です)
しかし、とにかく例外が発生します。
期待される結果は、正しいパディングがなくても base32 文字列がデコードされることです。