【前回の質問の続き】pythonから自作APIへ暗号化されたバイナリデータを送りたい

前回の質問の続きです

実現したいこと

pythonで作っているスマホアプリから、公開鍵で暗号化されたユーザネーム(bytes型)をbase64でエンコード

bytes型のデータをPHPで作った自作APIへ送る

API側で送られてきたデータを秘密鍵で復号
ということがしたいです。

前提

前回の質問にて、GETで送る方法とPOSTで送る方法を勧められたので今回は試した結果について質問させていただきます。

該当のソースコード(GETを使う方法)

送信側(Python)

python

1#省略2 with open('public.key', 'rb') as f:3 public_key = f.read() #.keyファイル読み取り4 key = RSA.importKey(public_key)5 cipher_rsa = PKCS1_OAEP.new(key) #公開鍵の読み込み6 c_username = cipher_rsa.encrypt(input_username.encode()) #暗号化されたバイナリデータ7 base64_username = base64.b64encode(c_username)8 str_username = base64_username.decode('utf-8')9 10 url = "http://192.168.11.69/api/get_id_password.php?username="+str_username 11 url_text = open('url.txt', 'w') #手動でアクセスできるようにURLを保存12 url_text.write(url)13 url_text.close()14 json_data = requests.get(url)15 print(json_data)16 if str(json_data) == '<Response [200]>':17 id = json_data.json()['id']

送信側エラー(Python)

on_press: app.root.login.check() File "C:\tenko\main.py", line 49, in check id = json_data.json()['id'] File "C:\Users\Owner\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\models.py", line 975, in json raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

受信側(PHP)

PHP

1//省略2 if(isset($_GET["username"])){3 var_dump($_GET["username"]);4 var_dump(base64_decode($_GET['username']));5 $key = file_get_contents('秘密鍵のパス');6 openssl_private_decrypt(base64_decode($_GET['username']), $username, $key);7 var_dump($username);8//省略9$array = [ 'id'=>$data['id'], 'password'=>$data['password'] ];10print json_encode($array);11 }

受信側エラー(PHP)
※1ファイルに記録したURLを直接ブラウザに貼り付けました。
※2ver_dump()の結果も含まれています

※var_dump($_GET["username"]); string(344) "A48fRNXcLFi5u1vcCo3gk2h IyiYqyA6dk0gA93IbCRqB2IKR2BLIiXyJXCzJeNOCysCrd NB4OgAbpAFxTcZayebBR2tPIW7XpEgNwwaAs/9j09cSk8yZeJZ/Orixmxup2TycedAsz4LjAk/dMlUCl3jxbtH/Asx3i5Zxkt0GbPf6le5dyUeLhWQ/5UWwN5K/YmxEOHJb7GpInMS9zXqt4Wbpb6ly0xmp4fm1mfCKBIPWMOwXj Eq544KoIGwbx r6Z3Uah5a8gJ3418WtSw7BoOv8COJ/NgpMYrraIwkgBBPsDIDbOq1QteWGI7plHqjN7al6H/F9raVjV9GrRtA==" ※var_dump(base64_decode($_GET['username'])); string(253) "�D��,X��[� ���hH�&*���H��r �؂��ȉ|�\,�xӂ���t�x:��qM�Z���GkO!nפH ����c���̙x�:�����<�y�,ς�O�2U�x�n���w��q��l����]�G��d?�E�7��blD8r[�jH�Ľ�z��f�o�r����������0��J�エ lƾ��F�� '~5�kRðh:�8�͂�����H� 6ΫT-ya��G�3{j^��_kiX��jѴ" ※var_dump($username); NULL ※エラー出力 <br /> <b>Notice</b>: Trying to access array offset on value of type bool in <b>C:\xampp\htdocs\api\get_id_password.php</b> on line <b>36</b><br /> <br /> <b>Notice</b>: Trying to access array offset on value of type bool in <b>C:\xampp\htdocs\api\get_id_password.php</b> on line <b>36</b><br /> ※nullが返される {"id":null,"password":null}

該当のソースコード(POSTを使う方法)

送信側(python)
``python
with open('public.key', 'rb') as f:
public_key = f.read() #.keyファイル読み取り
key = RSA.importKey(public_key)
cipher_rsa = PKCS1_OAEP.new(key) #公開鍵の読み込み
c_username = cipher_rsa.encrypt(input_username.encode()) #暗号化されたバイナリデータ
base64_username = base64.b64encode(c_username)
payload = {'username': base64_username}
#str_username = base64_username.decode('utf-8')

url = "http://192.168.11.69/api/get_id_password.php" url_text = open('url.txt', 'w') url_text.write(url) url_text.close() json_data = requests.post(url,payload) print(json_data) if str(json_data) == '<Response [200]>': id = json_data.json()['id']
送信側エラー(python)

File "C:\tenko\main.py", line 50, in check
id = json_data.json()['id']
File "C:\Users\Owner\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\models.py", line 975, in json
raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

受信側(PHP) ```PHP <?php header('Content-Type: application/json; charset=UTF-8'); $request_body = file_get_contents('php://input'); $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); $data = json_decode($request_body,true); //省略 if(isset($data["username"])){ $key = file_get_contents('秘密鍵のパス'); openssl_private_decrypt(base64_decode($data['username']), $username, $key); //省略 $array = [ 'id'=>$data['id'], 'password'=>$data['password'] ]; print json_encode($array); } ?>

POSTの時は、PHP側のエラーを見ることができませんでした。(それをする技術がない)

コードが間違っている箇所がございましたら、ばんばん指摘してください。

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

PHP7.4.26
Python3.10.9

コメントを投稿

0 コメント