Kata pengantar
Selama sekitar 2 tahun saya telah menjadi pengguna Asisten Rumah dan secara bertahap menyesuaikan dengan perangkat yang ingin saya integrasikan di sana. Salah satu perangkat ini adalah akuisisi saya yang relatif baru: konvektor dari Electrolux.
Awalnya, saya menganggap konvektor konvensional, yang saya rencanakan untuk dikontrol melalui soket pintar. Dalam proses mempelajari model konvektor, minat saya beralih ke model modern yang dapat dikontrol melalui Internet di luar kotak. Meskipun lebih mahal daripada solusi dengan "soket", rasa ingin tahu tetap ada dan pilihan ditetapkan pada konvektor modular dari Electrolux, yang, dengan latar belakang pesaing, menarik desain tersebut.
Konvektor mengatasi tugasnya sebagai perangkat dengan sempurna di musim dingin. Saya sangat senang dengan itu.
Nyeri dan upaya pertama untuk mengontrol di luar aplikasi
Tetapi kontrol melalui aplikasi seluler hanya membuat kecewa.
Koneksi panjang ke server, terkadang dari waktu ke-N. Sering tidak tersedianya perangkat dan kekhawatiran tentang keamanan. Masalah lainnya adalah kurangnya solusi untuk integrasi ke dalam rumah pintar.
Setelah beberapa waktu, minat muncul untuk mempelajari kemungkinan pengelolaan melalui solusi pihak ketiga. Tidak mungkin Google melakukan sesuatu yang masuk akal untuk mengontrol konvektor. Oleh karena itu, saya memutuskan untuk mempelajari lalu lintas aplikasi seluler, karena perangkatnya jauh, dan aplikasi selalu ada.
Setelah mempelajari materi tentang analisis lalu lintas aplikasi dan karena kurangnya pengalaman, yang dapat saya temukan hanyalah data apa dan ke mana ditransfer untuk otorisasi, dan komunikasi lebih lanjut berlangsung melalui TCP dalam bentuk terenkripsi. Dan saya juga menemukan seperti apa aplikasi android itu setelah dibongkar)
Saat ini tangan saya turun, berharap untuk mencoba lagi nanti.
Pengalaman kedua
, - . .
, .
2 ,
PHP ( ) Python.
Dalam prosesnya, saya menemukan bahwa setiap bahasa memiliki nuansa tersendiri dalam fungsi enkripsi. Harus menulis solusi di Java, Python dan PHP untuk memastikan enkripsi / dekripsi berfungsi seperti yang diharapkan. Misalnya, aplikasi menggunakan PKCS7Padding, sementara bahasa lain membutuhkan PKCS5Padding atau tulis implementasi Anda sendiri.
<?php
// ...
public function decrypt(string $message): string
{
$hash = hash('sha384', $this->key, true);
$iv = substr($hash, 32, 16);
$key = substr($hash, 0, 32);
$message = substr($message, 0, -32);
$result = (string) openssl_decrypt(
(string) base64_decode($message, true),
'AES-256-CBC',
$key,
OPENSSL_CIPHER_AES_256_CBC,
$iv
);
return CleanHelper::clean($result);
}
def decode(message, key):
digest = hashlib.sha384(key.encode()).digest()
iv = digest[-16:]
key = digest[:32]
message = message[:-32]
message = b64decode(message)
cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
decryptor = cipher.decryptor()
decrypted = decryptor.update(message) + decryptor.finalize()
unpadder = padding.PKCS7(128).unpadder()
decrypted = unpadder.update(decrypted) + unpadder.finalize()
return decrypted.decode()
Jadi, setelah beberapa malam, sudah ada klien dalam PHP , yang memungkinkan Anda untuk masuk dan berkomunikasi melalui TCP dengan server.
Menurut saya, MVP yang dihasilkan bisa dibilang sukses. Bagian 2
Tautan ke repositori dan telegram