◆ 上限をつける必要ないよね

ふと思ったのですが パスワードを登録するときに 「3文字以上~8文字以下で登録してください」 とかけっこうみますよね

前提として パスワードの保存はそのままの値で保存されてるなんてありえなくてなんらかの加工がされているはずです
例えば パスワードの文字の前後に abcde をくっつけて sha-256 変換を 30 回くらい返した値とかそういうの (例なのでこうすれば絶対安全かまでは知らないです そこまでセキュリティは専門じゃないですし)

複合できる(もとの値にもどせる)暗号化じゃなくて もとに戻せないような変換がされていると 万が一データベースからパスワードが流出しても 元の値を探さないと他の人のアカウントにログインしたくても勝手にログインできないです
それにデータベースにユーザが入力するパスワードそのままの文字が保存されていて それがバレてしまうと 複数サービスでパスワード使いまわしてる人が多い現状では多くのサービスが一気に全滅してしまう人が多いハズ


よく使われるもとに戻せない変換だと元の文字の長さに関係なく同じ長さの文字になるので 「1000文字もパスワード入力されるとサーバのディスク容量をムダに使うしー」 なんて問題はないはず

となればなんで制限なんて作ってるの?
パスワードに文字じゃなくて画像ファイルとか好きなファイルを使えるようにしてしまってもいいんじゃないの?そのほうが忘れづらいし総当りでパスワード入力するとかムリになるのに

ファイルのアップロードは通信量増えるからと考えられますけど 文字のパスワードだと10文字も1000文字も通信するのに大したデータ量じゃないです
1000文字だとしてもログイン画面出すための通信量からすると1%にも満たないはずです


「6文字以上にしてください」 みたいな最低文字数は 「a」 がパスワードだったらいくら加工して保存していても 一瞬でそのままのパスワードがバレてしまいますから注意する意味であってもいいと思います

でも上限はいらないと思うんです
誰も入力しないだろうって長さの 128 とか 255 とかなら気にしないんですけど 8 とか 12 はなんで?としか思えません
実はそのままパスワード保存してたりしない?とか勘ぐってしまいます

あと input の長さを maxlength=12 のように設定されてると 13 文字目を打つと文字が入力されません
入力されていないだけで注意書きはでません
「AaBbCcDdEeFfGg」 と打ったつもりでも実際は 「AaBbCcDdEeFf」 までしか入力されていないです
そのせいでパスワードが入力したはずのものの途中までで設定されてしまってログインするときのパスワードと一致しなくてログインできないってことがあります
経験談です

ログインする方の input も maxlength=12 にしていればログインはできるのですが 実はパスワードが途中までしか使われていないというのがユーザに伝わっていないのもなんかイヤなので パスワードの確認入力の方は maxlength を設定しないでおいて登録するときにパスワードが一致しませんって出してくれると嬉しいです

まあ引っかかるような上限をつけないでくれるのが一番ですけど



あと よく思うのですが ハッシュ化した値が奇跡的に 「a」 とか 「123」 とか 「password」 みたいなダメなパスワードの例をハッシュ化した値と被って複雑なパスワードなのに破られたなんてケースないのかな