【Kivy】ハッシュ化されたパスワードを用いたパスワードの照合方法

実現したいこと

Windowsで動くPythonで平文のパスワードと暗号化されたパスワードの照合を行いたいです。
cryptモジュールを使わないパスワードの照合する方法を教えてください!

前提

PHPで動いでいるWebアプリにて、次のようなコードでパスワードをハッシュ化してDBに保存・照合を行っています。

php

1 public function get_hashed_password($password)2 {3 // コストパラメーター4 // 04 から 31 までの範囲 大きくなれば堅牢になりますが、システムに負荷がかかります。5 $cost = 10;6 7 // ランダムな文字列を生成します。8 $salt = strtr(base64_encode(random_bytes(16)), '+', '.');9 10 // ソルトを生成します。11 $salt = sprintf("$2y$%02d$", $cost) . $salt;12 13 $hash = crypt($password, $salt);14 15 return $hash;16 }17 18 19 // パスワードが一致したらtrueを返します20 public function check_password($password, $hashed_password)21 {22 if (hash_equals($hashed_password, crypt($password, $hashed_password))) {23 return true;24 }25}

今回、登録されたユーザデータを用いて、Kivyのスマホアプリでもログイン機能を実装しようと思い、
いろいろ試してみました。

認証の流れ

1.usernameとパスワードを入力してもらう

2.usernameに登録された、暗号化されたパスワードを自作WebAPIから入手する

3.暗号化されたパスワードと入力された平文のパスワードを照合する

しかし、3.の手順で必要なcryptモジュールがWindowsでは使用できないようです。

該当のソースコード

python

1import hmac 2import crypt 3#省略4 5 def check(self):6 username = self.ids['username'] #usernameWidget7 password = self.ids['password'] #passwordWidget8 if username.text != '' and password.text != '':9 url = "http://192.168.11.69/api/get_id_password.php"+'?username='+username.text 10 json_data = requests.get(url) #ユーザネームから暗号化されたパスワードの入手11 #ここで照合12 if( hmac.compare_digest(crypt.crypt(password.text,json_data.json()['password']), json_data.json()['password']) ): 13 self.ids['error'].text = json_data.json()['password']14 else:15 self.ids['error'].text = ('メールアドレスまたは、パスワードが間違っています.')16 else:17 self.ids['error'].text = ('メールアドレスまたは、パスワードが入力されていません.')

発生している問題・エラーメッセージ

ImportError: The crypt module is not supported on Windows

補足情報(FW/ツールのバージョンなど)

Python 3.10.9
Kivy (バージョン不明)

コメントを投稿

0 コメント