半角円記号を含むパスワード
クラブ会員になっている某サービスにiPhoneアプリからログインしたいのですが、パスワードがどうにも入力できません。
忘れたとか、誤入力したとか、そういうことではなく、入力したい文字がキーボードに見当たらないのです。
以下、
半角円記号を含むパスワードを入力したいが、iPhoneのキーボードに半角円記号がなくて困った話。
と、そのそもそもの原因を調べたら根が深かった話。
ということで、実は某サービスから自動発行されたパスワードは半角円記号を含む文字列だったわけですが、このiPhoneアプリのキーボードでは半角円記号がなく、ログインできませんでした。
それはサービスとしてどうなの、という点はとりあえず置いておいて、半角円記号がない理由を調べてみると、いろいろなことがわかりました。
によると、半角円記号はJIS X 0201では、0x5C番地に割り当てられているが、
ISO-8859-1では、0x5C番地はバックスラッシュが割り当てられている、とのこと。
そこで、先のiPhoneアプリにおいて、パスワード内の半角円記号の文字の代わりに
バックスラッシュを入力してみると、あっさりとログインできてしまいました。
MAC OSからの入力も同様です。
WindowsのPCのキーボード(109日本語)には半角円記号のキーがあります。
が、その下の方にはバックスラッシュのキーもあります。
もし、Windowsでバックスラッシュを含むパスワードを入力していた場合はどうなるのか?
試してみたところ、iPhoneでもバックスラッシュの入力で認証されました。
Wiresharkで確認してみると、Windowsで入力した半角円記号とバックスラッシュは
どちらもURLエンコードされると %5C になっており、同じ文字と認識されているようです。
と、ここまでやってようやく気づきました。。Windowsでバックスラッシュを入力できるわけない。
バックスラッシュのキーを打っても半角円記号が入力されるべきところを、
パスワードフィールドだったのでマスクされてバックスラッシュを入力できていると思い込んでいたのですね。
なぜ、OS、キーボード、などの間で、このようなややこしい違いが生まれてしまったのか?
YEN SIGN問題縁起 | yasuokaの日記 | スラッシュドット・ジャパン
ここにその経緯がまとめられていました。
なんとも根が深く、そして、厄介ですね。
アプリケーションレベルでは極力考慮したくない類いの内容です。
日本では多くの人が、PCはWindowsかつ日本語環境、モバイルは非Windowsという環境にあり、
私と同じようにこの問題に遭遇している人も多いのでは?とも思いましたが、
調べた限りではそのようなドンピシャな記事は見当たりません。
これは某サービスのサーバーサイド処理が特殊ということでしょうか。
サーバーサイド処理の符号化方式など、気になるところです。(もしやWindowsServer?)