Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

[Gelöst] AES CBC Verschlüsselung (Sunseeker SK-Robot Cloud Passwort)

Begonnen von Markus M., 14 Mai 2022, 10:48:23

Vorheriges Thema - Nächstes Thema

Markus M.

Hi zusammen,

hat hier zufällig jemand Erfahrung mit AES CBC Verschlüsselung?
Der Aldi/Scheppach/Practixx/Sunseeker Mähroboter aus diesem Jahr nutzt das für den Login.

Ich habe folgenden funktionierenden CryptoJS Code durch Reverse-Engineering und Ausprobieren rausbekommen:

encryptAES = (text) => {
    var key = CryptoJS.enc.Latin1.parse('pigxpigxpigxpigx');
    var iv = key;
    var encrypted = CryptoJS.AES.encrypt(text, key, {
      iv: iv,
      padding: CryptoJS.pad.ZeroPadding,
      mode: CryptoJS.mode.CBC
  }).toString();
    return encrypted;
  };


Wenn man da zum Beispiel 'password' reinsteckt, muss 'ZR4+2y45jidwSlOhS4pTnw==' rauskommen.
Erfolgreich getestet via https://stackblitz.com/edit/cryptojs-aes-encrypt-decrypt?file=index.js

Schafft es jemand, das in Perl nachzubauen?
Ich bekomme es leider nicht auf die Reihe :(


Lösung siehe unten

Viele Grüße, Markus
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Markus M.

Immer wenn man gerade dabei ist aufzugeben ;D

Für die Nachwelt dokumentiert:
# pigx4_AES_CBC_encode.pl
use strict;
use warnings;
require Crypt::CBC;
use MIME::Base64;

my $text="password";

my $cipher = Crypt::CBC->new(
{
    'key'         => 'pigxpigxpigxpigx',
    'cipher'      => 'Rijndael',
    'iv'          => pack("H*","70696778706967787069677870696778"),
    'literal_key' => 1,
    'padding'     => 'null',
    'header'      => 'none',
    keysize       => 128 / 8
});
my $encoded = encode_base64($cipher->encrypt($text));

print $text."\n";
print $encoded;

# password
# ZR4+2y45jidwSlOhS4pTnw==

exit;
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

betateilchen

es geht sogar noch etwas generischer:


use strict;
use warnings;
use Crypt::CBC;
use String::HexConvert 'ascii_to_hex';
use MIME::Base64;

my $text = "password";
my $key  = "pigxpigxpigxpigx";

my $cipher = Crypt::CBC->new(
{
    'key'         => $key,
    'cipher'      => 'Rijndael',
    'iv'          => pack("H*",ascii_to_hex($key)),
    'literal_key' => 1,
    'padding'     => 'null',
    'header'      => 'none',
    keysize       => 128 / 8
});
my $encoded = encode_base64($cipher->encrypt($text));

print $text."\n";
print $encoded;

# password
# ZR4+2y45jidwSlOhS4pTnw==

exit;
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus M.

Zitat von: betateilchen am 15 Mai 2022, 16:32:04es geht sogar noch etwas generischer
Auf das ascii_to_hex bin ich nicht gekommen bzw. hatte an der Stelle wohl keinen Bock mehr, danke.
Der Key ändert sich aber eh nicht, den findet man witzigerweise sogar im Netz - stand wohl so in irgendeinem chinesischen Howto ;D
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0